Name: series-workfloww6bfc Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[0] Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SW_PROTECTED_VM", "KVM_GENERIC_MEMORY_ATTRIBUTES", "EXPERT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SW_PROTECTED_VM", "KVM_GENERIC_MEMORY_ATTRIBUTES", "EXPERT" ], "series_id": "734bda86-476d-49cf-9a5e-335cc5b006c0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_count_mem_attr_entries", "kvm_vm_set_mem_attributes", "kvm_vm_ioctl_set_mem_attributes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "base_tree": "kvm-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDssCiAgICAmIzM0O0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTJiMzNDssCiAgICAmIzM0O0VYUEVSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDNkZDA0NjA1ZjJlNTUuLmJiMDNkYzIwZDNmOTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTU3Myw2ICYjNDM7NTczLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogVGhpcyBudW1iZXIgbXVzdCBiZSBkZXRlcm1pbmVkIG5vdCB0byBleGNlZWQgc3VjaCBsaW1pdHMuXG4gICovXG4gI2RlZmluZSBLVk1fTUVNX01BWF9OUl9QQUdFUyAoKDFVTCBcdTAwM2NcdTAwM2MgMzEpIC0gMSlcbiYjNDM7LypcbiYjNDM7ICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW5cbiYjNDM7ICogbWVtX2F0dHJfYXJyYXkgcGVyIFZNICh+MzAwIE1pQiBvZiB4YV9ub2RlcyBhdCAyXjI1KS4gIFdpdGhvdXQgaXQsXG4mIzQzOyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbiYjNDM7ICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiAmIzQzOzg4NCw3IEBAIHN0cnVjdCBrdm0ge1xuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiBcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXG4gXHRzdHJ1Y3QgeGFycmF5IG1lbV9hdHRyX2FycmF5O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50O1xuICNlbmRpZlxuIFx0Y2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTtcbiB9O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTExMjcsNyAmIzQzOzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuJiM0MztcdHhhX2luaXRfZmxhZ3MoXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcbiYjNDM7XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcbiAjZW5kaWZcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG5AQCAtMjU0NCw2ICYjNDM7MjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS5cbiYjNDM7ICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgMCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1xuJiM0MztcdHhhc19mb3JfZWFjaChcdTAwMjZ4YXMsIGVudHJ5LCBVTE9OR19NQVgpIHtcbiYjNDM7XHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbiYjNDM7XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVudHJ5KVxuJiM0MztcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4mIzQzO1x0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXG4gc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxuQEAgLTI1NjcsNiAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuJiM0MztcdGJvb2wgbXV0YXRlZCA9IGZhbHNlO1xuIFx0aW50IHIgPSAwO1xuIFxuIFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xuQEAgLTI1NzksNiAmIzQzOzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiBcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvblxuJiM0MztcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXR0cmlidXRlcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbiYjNDM7XHRcdHIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbiYjNDM7XHQgKiBjb3VudGVyIG11c3QgYmUgcmVzeW5jaHJvbml6ZWQgb24gdGhlIHdheSBvdXQuICBFYXJseS1vdXRzIGFib3ZlXG4mIzQzO1x0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRhdGVkID0gdHJ1ZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXG4gXHQgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuXG5AQCAtMjYwMyw2ICYjNDM7MjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcbiYjNDM7XHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuJiM0MztcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcbiYjNDM7XHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxuJiM0MztcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG11dGF0ZWQpXG4mIzQzO1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7LAogICAgJiMzNDtLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjhjZGE4MmNhODkyMzA5Yjk5OWM3YTY0YTQ2OTc0ZmM0NGI1OTFhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDNkZDA0NjA1ZjJlNTUuLmJiMDNkYzIwZDNmOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTU3Myw2ICYjNDM7NTczLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKiBUaGlzIG51bWJlciBtdXN0IGJlIGRldGVybWluZWQgbm90IHRvIGV4Y2VlZCBzdWNoIGxpbWl0cy4KICAqLwogI2RlZmluZSBLVk1fTUVNX01BWF9OUl9QQUdFUyAoKDFVTCAmbHQ7Jmx0OyAzMSkgLSAxKQomIzQzOy8qCiYjNDM7ICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4KJiM0MzsgKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCwKJiM0MzsgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGdyb3dzIHRoZSBhcnJheSB3aXRob3V0IGxpbWl0ICh+OS4zIGJ5dGVzIG9mCiYjNDM7ICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMJKDFVTCAmbHQ7Jmx0OyAyNSkKIAogLyoKICAqIFNpbmNlIGF0IGlkbGUgZWFjaCBtZW1zbG90IGJlbG9uZ3MgdG8gdHdvIG1lbXNsb3Qgc2V0cyBpdCBoYXMgdG8gY29udGFpbgpAQCAtODc3LDYgJiM0Mzs4ODQsNyBAQCBzdHJ1Y3Qga3ZtIHsKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMKIAkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAoZm9yIHdyaXRlcykgYW5kIFJDVSAoZm9yIHJlYWRzKSAqLwogCXN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50OwogI2VuZGlmCiAJY2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTsKIH07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTExMjcsNyAmIzQzOzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSkKIAlyY3V3YWl0X2luaXQoJmFtcDtrdm0tJmd0O21uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTsKIAl4YV9pbml0KCZhbXA7a3ZtLSZndDt2Y3B1X2FycmF5KTsKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMKLQl4YV9pbml0KCZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSk7CiYjNDM7CXhhX2luaXRfZmxhZ3MoJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTsKJiM0MzsJa3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnQgPSAwOwogI2VuZGlmCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2t2bS0mZ3Q7Z3BjX2xpc3QpOwpAQCAtMjU0NCw2ICYjNDM7MjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS4KJiM0MzsgKiBTZXJpYWxpemF0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBpcyBwcm92aWRlZCBieSBrdm0tJmd0O3Nsb3RzX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJWEFfU1RBVEUoeGFzLCAmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXksIDApOwomIzQzOwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CiYjNDM7CXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZW50cnksIFVMT05HX01BWCkgewomIzQzOwkJaWYgKHhhX2lzX3JldHJ5KGVudHJ5KSkgewomIzQzOwkJCXhhc19wYXVzZSgmYW1wO3hhcyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZW50cnkpCiYjNDM7CQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiYjNDM7CQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKJiM0MzsJCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqLwogc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcykKQEAgLTI1NjcsNiAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLAogCX07CiAJdW5zaWduZWQgbG9uZyBpOwogCXZvaWQgKmVudHJ5OwomIzQzOwlib29sIG11dGF0ZWQgPSBmYWxzZTsKIAlpbnQgciA9IDA7CiAKIAllbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7CkBAIC0yNTc5LDYgJiM0MzsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJaWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpCiAJCWdvdG8gb3V0X3VubG9jazsKIAomIzQzOwkvKgomIzQzOwkgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvbgomIzQzOwkgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXR0cmlidXRlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpICZndDsgS1ZNX01FTV9BVFRSX01BWF9HRk5TKSB7CiYjNDM7CQlyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk0KJiM0MzsJICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZQomIzQzOwkgKiBza2lwIHRoZSAocG90ZW50aWFsbHkgZXhwZW5zaXZlKSByZWNvdW50LgomIzQzOwkgKi8KJiM0MzsJbXV0YXRlZCA9IHRydWU7CiYjNDM7CiAJLyoKIAkgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXMKIAkgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuCkBAIC0yNjAzLDYgJiM0MzsyNjQ5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJa3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO3Bvc3Rfc2V0X3JhbmdlKTsKIAogb3V0X3VubG9jazoKJiM0MzsJLyoKJiM0MzsJICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZQomIzQzOwkgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseQomIzQzOwkgKiByZXNlcnZlZCBHRk5zIGFyZSByZXRhaW5lZCBhbmQgbXVzdCBiZSBjb3VudGVkLCBhbmQgYSBzdWNjZXNzZnVsCiYjNDM7CSAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlCiYjNDM7CSAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuCiYjNDM7CSAqLwomIzQzOwlpZiAobXV0YXRlZCkKJiM0MzsJCWt2bS0mZ3Q7bWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsJiMzOTtzIEtWTSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBGcm9tIHRoZSBmaWxlIGxpc3QsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgZm9jdXNlZCBvbiBtZW1vcnkgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5OiBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCBhbmQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29uc3RhbnQsIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgLCBzZXQgdG8gMVVMICZsdDsmbHQ7IDI1LCB3aGljaCBsb29rcyBsaWtlIGEgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIEdsb2JhbCBGcmFtZSBOdW1iZXJzIChHRk5zKSBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGF0dHJpYnV0ZXMuICBBIG5ldyBgdW5zaWduZWQgbG9uZyBtZW1fYXR0cl9nZm5fY291bnQ7YCBpcyBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gIHdoZW4gYENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBjb3VudGluZyB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMuCgpJbiBga3ZtX2NyZWF0ZV92bSgpYCwgd2Ugc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBga3ZtLSZndDttZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudGAgc2V0IHRvIDAuIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIHVzaW5nIGFuIFhBcnJheSBmb3IgbWFuYWdpbmcgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzLCB3aGVyZSB0aGUgYFhBX0ZMQUdTX0FDQ09VTlRgIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIGFycmF5IHdpbGwga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIG9jY3VwaWVkIGVudHJpZXMuCgpUaGUgcGF0Y2ggaW1wbGVtZW50cyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKWAgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIHRoaXMgWEFycmF5IHRvIGNhbGN1bGF0ZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgY291bnQuCgpJbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcygpYCwgYSBjcnVjaWFsIGJvdW5kIGNoZWNrIGlzIGFkZGVkOiBpZiB0aGUgcHJvcG9zZWQgR0ZOIGNvdW50IGV4Y2VlZHMgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gQWxzbywgdGhlcmUgaXMgYSBgbXV0YXRlZCA9IHRydWU7YCBmbGFnIHRvIHNpZ25hbCBhIGNoYW5nZSBpbiBtZW1vcnkgYXR0cmlidXRlcy4gRmluYWxseSwgd2hlbiB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG11dGF0ZWQsIHRoZSBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIGlzIHVwZGF0ZWQgYnkgY2FsbGluZyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKWAuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLCBob3cgS1ZNIG1lbW9yeSBhdHRyaWJ1dGVzICphY3R1YWxseSogd29yaywgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBpdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQuIEkgdGhpbmsgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBldmFsdWF0ZSB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xODQ0PWVudW0ga3ZtX2ludHJfdHlwZSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODU1OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTg1Ni0jZGVmaW5lIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pICgoa3ZtKS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSlcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODA5ND12b2lkIGt2bV9tbXVfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODA5OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODEwMDojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMDEtc3RhdGljIGJvb2wgaHVnZXBhZ2VfdGVzdF9taXhlZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDkzPXN0YXRpYyBpbnQga3ZtX2FsbG9jX21lbXNsb3RfbWV0YWRhdGEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDE0MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDQtXHRrdm1fbW11X2luaXRfbWVtc2xvdF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHNsb3QpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD03MjY9c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTczMS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo3MzI6I2lmbmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzMtc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTc3Nz1zdHJ1Y3Qga3ZtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODgzLSNlbmRpZlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjg4NDojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODg1LVx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU2NT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzItXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU3MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3NC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU5MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk0LX1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk2LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oPTM0Nj1UUkFDRV9FVkVOVChrdm1fZGlydHlfcmluZ19leGl0LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oLTM2MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM2MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zNjItLypcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaD0zNjc9VFJBQ0VfRVZFTlQoa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zODUtKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM4NjojZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zODctXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDA9Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTI4LVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMjk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy0xMTMwLVx0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTI2Nj1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMzE0LVx0Y2xlYW51cF9zcmN1X3N0cnVjdChcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEzMTU6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy0xMzE2LVx0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQxOT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQzMi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzMzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MzQtc3RhdGljIHU2NCBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxudmlydC9rdm0va3ZtX21haW4uYzoyNjkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY5My1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMDgtXHRcdHJldHVybiAxO1xudmlydC9rdm0va3ZtX21haW4uYzo1MDA5OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cdGNhc2UgS1ZNX0NBUF9NRU1PUllfQVRUUklCVVRFUzpcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQxMi0jZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0lSUV9ST1VUSU5HICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy01NDE0LVx0Y2FzZSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTOiB7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDIzLVx0fVxudmlydC9rdm0va3ZtX21haW4uYzo1NDI0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQyNS1cdGNhc2UgS1ZNX0NSRUFURV9ERVZJQ0U6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGVyKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEtWTSBjb3JlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gaXRzIGltcGxlbWVudGF0aW9uIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZXMgMjU0MCB0byAyNjk1LiBUaGF0IHNob3VsZCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHRoaXMgc3lzdGVtIGNhbGwgaXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTQwOlx0XHQgKiBidXQgaXQmIzM5O3Mgbm90IG9idmlvdXMgdGhhdCBhbGxvd2luZyBuZXcgbWFwcGluZ3Mgd2hpbGUgdGhlIGF0dHJpYnV0ZXNcbjI1NDE6XHRcdCAqIGFyZSBpbiBmbHV4IGlzIGRlc2lyYWJsZSBvciB3b3J0aCB0aGUgY29tcGxleGl0eS5cbjI1NDI6XHRcdCAqL1xuMjU0MzpcdFx0a3ZtX21tdV9pbnZhbGlkYXRlX3JhbmdlX2FkZChrdm0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQpO1xuMjU0NDpcdFxuMjU0NTpcdFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XG4yNTQ2Olx0fVxuMjU0NzpcdFxuMjU0ODpcdC8qXG4yNTQ5Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR0ZOcyB3aXRoIGEgbWF0ZXJpYWxpemVkIGVudHJ5IGluIG1lbV9hdHRyX2FycmF5LlxuMjU1MDpcdCAqIFNlcmlhbGl6YXRpb24gYWdhaW5zdCBtb2RpZmljYXRpb25zIGlzIHByb3ZpZGVkIGJ5IGt2bS1cdTAwM2VzbG90c19sb2NrLlxuMjU1MTpcdCAqL1xuMjU1MjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbjI1NTM6XHR7XG4yNTU0Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgMCk7XG4yNTU1Olx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbjI1NTY6XHRcdHZvaWQgKmVudHJ5O1xuMjU1NzpcdFxuMjU1ODpcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xuMjU1OTpcdFx0XHRpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7XG4yNTYwOlx0XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4yNTYxOlx0XHRcdFx0Y29udGludWU7XG4yNTYyOlx0XHRcdH1cbjI1NjM6XHRcdFx0aWYgKGVudHJ5KVxuMjU2NDpcdFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbjI1NjU6XHRcbjI1NjY6XHRcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4yNTY3Olx0XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4yNTY4Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNTY5Olx0XHRcdH1cbjI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdHJldHVybiBjb3VudDtcbjI1NzM6XHR9XG4yNTc0Olx0XG4yNTc1Olx0LyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuMjU3NjpcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNTc3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbjI1Nzg6XHR7XG4yNTc5Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xuMjU4MDpcdFx0XHQuc3RhcnQgPSBzdGFydCxcbjI1ODE6XHRcdFx0LmVuZCA9IGVuZCxcbjI1ODI6XHRcdFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcbjI1ODM6XHRcdFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcbjI1ODQ6XHRcdFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQsXG4yNTg1Olx0XHRcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxuMjU4NjpcdFx0XHQubWF5X2Jsb2NrID0gdHJ1ZSxcbjI1ODc6XHRcdH07XG4yNTg4Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcbjI1ODk6XHRcdFx0LnN0YXJ0ID0gc3RhcnQsXG4yNTkwOlx0XHRcdC5lbmQgPSBlbmQsXG4yNTkxOlx0XHRcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXG4yNTkyOlx0XHRcdC5oYW5kbGVyID0ga3ZtX2FyY2hfcG9zdF9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXG4yNTkzOlx0XHRcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcbjI1OTQ6XHRcdFx0Lm1heV9ibG9jayA9IHRydWUsXG4yNTk1Olx0XHR9O1xuMjU5NjpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMjU5NzpcdFx0dm9pZCAqZW50cnk7XG4yNTk4Olx0XHRib29sIG11dGF0ZWQgPSBmYWxzZTtcbjI1OTk6XHRcdGludCByID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcbjI2MDI6XHRcbjI2MDM6XHRcdHRyYWNlX2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RhcnQsIGVuZCwgYXR0cmlidXRlcyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2MDY6XHRcbjI2MDc6XHRcdC8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIGVudGlyZSByYW5nZSBoYXMgdGhlIGRlc2lyZWQgYXR0cmlidXRlcy4gKi9cbjI2MDg6XHRcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuMjYwOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yNjEwOlx0XG4yNjExOlx0XHQvKlxuMjYxMjpcdFx0ICogQm91bmQgdGhlIG51bWJlciBvZiBtYXRlcmlhbGl6ZWQgR0ZOcyBwZXIgVk0uICBTZWUgdGhlIGNvbW1lbnQgb25cbjI2MTM6XHRcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbjI2MTQ6XHRcdCAqL1xuMjYxNTpcdFx0aWYgKGF0dHJpYnV0ZXMgXHUwMDI2XHUwMDI2XG4yNjE2Olx0XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbjI2MTc6XHRcdFx0ciA9IC1FTk9TUEM7XG4yNjE4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTcyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gTWVtb3J5IEF0dHJpYnV0ZSBTZXR0aW5nIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZWFjaGVkIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHNldCB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsIG1hY2hpbmUuIE15IGZvY3VzIGlzIG5vdyBvbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1wcm92aWRlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBteSBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIHdpbGwgYmUgYW4gaW1wb3J0YW50IHN0ZXAgaW4gbWFwcGluZyBvdXQgaG93IG1lbW9yeSBnZXRzIGhhbmRsZWQgYW5kIHZpcnR1YWxpemVkIGF0IHRoZSBsb3cgbGV2ZWwuIEkmIzM5O2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgSSBnbyB0aHJvdWdoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYyMDpcdFxuMjYyMTpcdFx0LypcbjI2MjI6XHRcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxuMjYyMzpcdFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxuMjYyNDpcdFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cbjI2MjU6XHRcdCAqL1xuMjYyNjpcdFx0bXV0YXRlZCA9IHRydWU7XG4yNjI3Olx0XG4yNjI4Olx0XHQvKlxuMjYyOTpcdFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXG4yNjMwOlx0XHQgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuXG4yNjMxOlx0XHQgKi9cbjI2MzI6XHRcdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYyBlbmQ7IGkmIzQzOyYjNDM7KSB7XG4yNjMzOlx0XHRcdHIgPSB4YV9yZXNlcnZlKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjI2MzQ6XHRcdFx0aWYgKHIpXG4yNjM1Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjYzNjpcdFxuMjYzNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjI2Mzg6XHRcdH1cbjI2Mzk6XHRcbjI2NDA6XHRcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2cHJlX3NldF9yYW5nZSk7XG4yNjQxOlx0XG4yNjQyOlx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpJiM0MzsmIzQzOykge1xuMjY0MzpcdFx0XHRyID0geGFfZXJyKHhhX3N0b3JlKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgaSwgZW50cnksXG4yNjQ0Olx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKSk7XG4yNjQ1Olx0XHRcdEtWTV9CVUdfT04ociwga3ZtKTtcbjI2NDY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjQ3Olx0XHR9XG4yNjQ4Olx0XG4yNjQ5Olx0XHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFx1MDAyNnBvc3Rfc2V0X3JhbmdlKTtcbjI2NTA6XHRcbjI2NTE6XHRvdXRfdW5sb2NrOlxuMjY1MjpcdFx0LypcbjI2NTM6XHRcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcbjI2NTQ6XHRcdCAqIGNoYW5nZWQ6IG9uIEVOT01FTSBwYXJ0d2F5IHRocm91Z2ggdGhlIHJlc2VydmUgbG9vcCwgcGFydGlhbGx5XG4yNjU1Olx0XHQgKiByZXNlcnZlZCBHRk5zIGFyZSByZXRhaW5lZCBhbmQgbXVzdCBiZSBjb3VudGVkLCBhbmQgYSBzdWNjZXNzZnVsXG4yNjU2Olx0XHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxuMjY1NzpcdFx0ICogd2FsayBzbyBpZGVtcG90ZW50IHJlcXVlc3RzIHN0YXkgTygxKS5cbjI2NTg6XHRcdCAqL1xuMjY1OTpcdFx0aWYgKG11dGF0ZWQpXG4yNjYwOlx0XHRcdGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgPSBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pO1xuMjY2MTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2NjI6XHRcbjI2NjM6XHRcdHJldHVybiByO1xuMjY2NDpcdH1cbjI2NjU6XHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuMjY2NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzICphdHRycylcbjI2Njc6XHR7XG4yNjY4Olx0XHRnZm5fdCBzdGFydCwgZW5kO1xuMjY2OTpcdFxuMjY3MDpcdFx0LyogZmxhZ3MgaXMgY3VycmVudGx5IG5vdCB1c2VkLiAqL1xuMjY3MTpcdFx0aWYgKGF0dHJzLVx1MDAzZWZsYWdzKVxuMjY3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NzM6XHRcdGlmIChhdHRycy1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiB+a3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pKVxuMjY3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NzU6XHRcdGlmIChhdHRycy1cdTAwM2VzaXplID09IDAgfHwgYXR0cnMtXHUwMDNlYWRkcmVzcyAmIzQzOyBhdHRycy1cdTAwM2VzaXplIFx1MDAzYyBhdHRycy1cdTAwM2VhZGRyZXNzKVxuMjY3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2Nzc6XHRcdGlmICghUEFHRV9BTElHTkVEKGF0dHJzLVx1MDAzZWFkZHJlc3MpIHx8ICFQQUdFX0FMSUdORUQoYXR0cnMtXHUwMDNlc2l6ZSkpXG4yNjc4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY3OTpcdFxuMjY4MDpcdFx0c3RhcnQgPSBhdHRycy1cdTAwM2VhZGRyZXNzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMjY4MTpcdFx0ZW5kID0gKGF0dHJzLVx1MDAzZWFkZHJlc3MgJiM0MzsgYXR0cnMtXHUwMDNlc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yNjgyOlx0XG4yNjgzOlx0XHQvKlxuMjY4NDpcdFx0ICogeGFycmF5IHRyYWNrcyBkYXRhIHVzaW5nIFwmIzM0O3Vuc2lnbmVkIGxvbmdcJiMzNDssIGFuZCBhcyBhIHJlc3VsdCBzbyBkb2VzXG4yNjg1Olx0XHQgKiBLVk0uICBGb3Igc2ltcGxpY2l0eSwgc3VwcG9ydHMgZ2VuZXJpYyBhdHRyaWJ1dGVzIG9ubHkgb24gNjQtYml0XG4yNjg2Olx0XHQgKiBhcmNoaXRlY3R1cmVzLlxuMjY4NzpcdFx0ICovXG4yNjg4Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4yNjg5Olx0XG4yNjkwOlx0XHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMpO1xuMjY5MTpcdH1cbjI2OTI6XHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG4yNjkzOlx0XG4yNjk0Olx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4yNjk1Olx0e1xuMjY5NjpcdFx0cmV0dXJuIF9fZ2ZuX3RvX21lbXNsb3Qoa3ZtX21lbXNsb3RzKGt2bSksIGdmbik7XG4yNjk3Olx0fVxuMjY5ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChnZm5fdG9fbWVtc2xvdCk7XG4yNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29udGV4dCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBob3cgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGlzIGludm9rZWQgd2l0aGluIHRoZSBga3ZtX3ZtX2lvY3RsYCBmcmFtZXdvcmsuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgYW5kIG1hbmFnZWQgZm9yIGEgS1ZNIHZpcnR1YWwgbWFjaGluZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY29udHJvbCBmbG93IHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIHJlcXVlc3RzIGFuZCB0aGUgaHlwZXJ2aXNvciYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4KCkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBvZiB0aGlzIElPQ1RMOiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHRvIG1vZGlmeSBhc3BlY3RzIG9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2Ugc2V0dGluZyBtZW1vcnkgcmVnaW9ucyBhcyBkZXZpY2UgbWVtb3J5LCBtYWtpbmcgaXQgcmVzZXJ2ZWQsIHBlcmhhcHMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUgaHlwZXJ2aXNvciYjMzk7cyBtZW1vcnkgbWFwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgdHlwZXMgb2YgSU9DVEwgY2FsbHMgYXJlIHNlbnNpdGl2ZS4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIGlucHV0cyBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXJlIG1ldC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGBrdm1fdm1faW9jdGxgIHNpZGUgb2YgdGhpbmdzLiBUaGlzIGlzIHdoZXJlIHRoZSBJT0NUTCBjYWxscyBjb21lIGluLiBga3ZtX3ZtX2lvY3RsYCBpcyB0aGUgY2VudHJhbCBkaXNwYXRjaCBmb3IgYWxsIFZNLWxldmVsIGNvbnRyb2wgY29tbWFuZHMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBnYXRla2VlcGVyLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCByZXF1ZXN0IGlzIHJvdXRlZCBmcm9tIHRoZSBpbml0aWFsIHVzZXIgc3BhY2UgaW52b2NhdGlvbiB0aHJvdWdoIHRoYXQgYGt2bV92bV9pb2N0bGAgc3dpdGNoIHN0YXRlbWVudC4gV2hhdCBhcmUgdGhlIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gc3RlcHMgYWxvbmcgdGhlIHdheT8gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGFyZSwgb3IgYXQgbGVhc3Qgd2hlcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYXJlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBXaGF0IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBib3RoIGluIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZT8gV2hhdCBmaWVsZHMgZG8gdGhleSBjb250YWluPyBIb3cgYXJlIHRoZXNlIHZhbHVlcyBpbnRlcnByZXRlZCBieSB0aGUgS1ZNIGNvcmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGZvcm1hdCBzdHJpbmcgYnVncz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBJLCBmb3IgaW5zdGFuY2UsIHNldCBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24gYXMgZGV2aWNlIG1lbW9yeS4gVGhlIEtWTSBjb3JlIG5lZWRzIHRvIGNvbW11bmljYXRlIHRob3NlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlIE1NVSBhbmQgZGV2aWNlIGVtdWxhdGlvbiBsYXllcnMuCgpJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBpbnRlcm5hbCBsb2NraW5nIG1lY2hhbmlzbXMgdG9vLiBNZW1vcnkgYXR0cmlidXRlcyBsaWtlbHkgdG91Y2ggdmFyaW91cyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBzbyB0aGUga2VybmVsIG5lZWRzIHRvIGVuZm9yY2UgY29uY3VycmVuY3kgY29udHJvbCB0byBwcmV2ZW50IGNvcnJ1cHRpb24uIEFyZSBzcGlubG9ja3MsIG11dGV4ZXMsIG9yIFJDVSB1c2VkPyBJZiBzbywgd2hhdCBpcyB0aGUgc2NvcGUgb2YgdGhlc2UgbG9ja3M/IEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBvciBjb2Fyc2UtZ3JhaW5lZD8gQW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHByaW9yaXR5IGludmVyc2lvbj8gSSBzaG91bGQgYWxzbyBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZWxlbWVudHMgb2YgdGhlIGh5cGVydmlzb3IuIEhvdyBkb2VzIHRoaXMgYWZmZWN0IHBhZ2UgdGFibGVzPyBXaGF0IGhhcHBlbnMgd2l0aCBOVU1BIG5vZGVzPwoKRmluYWxseSwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgY2FsbCBmYWlscz8gRG9lcyBpdCByZXR1cm4gYSBzcGVjaWZpYyBlcnJvciBjb2RlPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBoYW5kbGVkIGJ5IHVzZXJzcGFjZT8gQXJlIHRoZSBlcnJvcnMgc3VmZmljaWVudGx5IGluZm9ybWF0aXZlPyBBcmUgdGhlcmUgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzPyBXaGF0IGFyZSB0aGUgcmVjb3ZlcnkgcGF0aHMgYWZ0ZXIgYW4gZXJyb3I/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBiZWNhdXNlIG1lbW9yeSBzZXR0aW5nIGlzIGEgdmVyeSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4KCkluIHN1bW1hcnksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvbnRyb2wgZmxvdywgYXJndW1lbnQgdmFsaWRhdGlvbiwgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBvZiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgaW5zdGFiaWxpdHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQsIGFuZCBJJiMzOTttIHRyZWF0aW5nIHRoaXMgbGlrZSBhIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvamVjdCBvZiBzb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDEwOlx0XHRcdGJyZWFrO1xuNTQxMTpcdFx0fVxuNTQxMjpcdCNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSVJRX1JPVVRJTkcgKi9cbjU0MTM6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG41NDE0Olx0XHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcbjU0MTU6XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyBhdHRycztcbjU0MTY6XHRcbjU0MTc6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NDE4Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhdHRycywgYXJncCwgc2l6ZW9mKGF0dHJzKSkpXG41NDE5Olx0XHRcdFx0Z290byBvdXQ7XG41NDIwOlx0XG41NDIxOlx0XHRcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgXHUwMDI2YXR0cnMpO1xuNTQyMjpcdFx0XHRicmVhaztcbjU0MjM6XHRcdH1cbjU0MjQ6XHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG41NDI1Olx0XHRjYXNlIEtWTV9DUkVBVEVfREVWSUNFOiB7XG41NDI2Olx0XHRcdHN0cnVjdCBrdm1fY3JlYXRlX2RldmljZSBjZDtcbjU0Mjc6XHRcbjU0Mjg6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NDI5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjZCwgYXJncCwgc2l6ZW9mKGNkKSkpXG41NDMwOlx0XHRcdFx0Z290byBvdXQ7XG41NDMxOlx0XG41NDMyOlx0XHRcdHIgPSBrdm1faW9jdGxfY3JlYXRlX2RldmljZShrdm0sIFx1MDAyNmNkKTtcbjU0MzM6XHRcdFx0aWYgKHIpXG41NDM0Olx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBNZW1vcnkgQXR0cmlidXRlIFRob3VnaHRzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBrdm1fdm1faW9jdGxgLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gZ2V0IGhlcmU/JiMzNDsgT2YgY291cnNlIHdlIGNhbiEgVGhpcyBpcyBLVk0gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIGEgY29yZSBjb21wb25lbnQgb2YgTGludXggdmlydHVhbGl6YXRpb24uIEEgdXNlciBwcm9jZXNzIGhhcyB0byBvcGVuIGAvZGV2L2t2bWAsIGNyZWF0ZSBhIHZpcnR1YWwgbWFjaGluZSB1c2luZyBgaW9jdGwoa3ZtX2ZkLCBLVk1fQ1JFQVRFX1ZNLCAuLi4pYC4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgY2FuIHlvdSBsZWdpdGltYXRlbHkgY2FsbCBgaW9jdGxgIHdpdGggYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgISBHb3QgaXQuCgpOb3csIHRvIGdldCBkb3duIHRvIGRldGFpbHMsIEkgd2FudCB0byBjbGFyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGUgYENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgYW5kLCBmb3IgdGhhdCBtYXR0ZXIsIHdoYXQgaXMgdGhlIGltcGFjdCBvZiBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyB1c2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAwPWNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFNlbGVjdGlvbiBvZiBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgZWFybGllciBncmVwIG91dHB1dCBnYXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIHNvIEkga25vdyBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoqICAgYEtWTV9TV19QUk9URUNURURfVk1gIG9uIGBLVk1fWDg2YCBhbmQgYFg4Nl82NGAuCiogICBgS1ZNX0lOVEVMX1REWGAgaWYgYElOVEVMX1REWF9IT1NUYCBpcyBlbmFibGVkLgoqICAgYEtWTV9BTURfU0VWYCwgd2hpY2ggc2VlbXMgdG8gYmUgbGlua2VkIHRvIGBBUkNIX0hBU19DQ19QTEFURk9STWAuCgpOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgZ28gYmFjayBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIHRob3NlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRvIGdldCB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IGNoYWluLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbiAgODQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4gIDg1Olx0XHRkZXBlbmRzIG9uIEVYUEVSVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbiAgODc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuICA4ODpcdFx0aGVscFxuICA4OTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxuICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuIDExMDpcdCAgICAgICAgaGVscFxuIDExMTpcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0mIzM5O3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcbiAxMTI6XHQgICAgICAgICAgbGV0IGd1ZXN0cyByZWNlaXZlIGEgdmlydHVhbGl6YXRpb24gZXhjZXB0aW9uLiAgVmlydHVhbGl6YXRpb25cbiAxMTM6XHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcbiAxMTQ6XHQgICAgICAgICAgaW4gdGhlIGd1ZXN0LlxuIDExNTpcdFxuIDExNjpcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcbiAxMTc6XHQgICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSYjMzk7cyBXQVJOLCBpbiBwYXJ0aWN1bGFyIHdpdGggZXB0YWQ9MCBhbmQvb3IgbmVzdGVkXG4gMTE4Olx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBBTUQgU0VWIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXZSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55dGhpbmcuJiMzNDsgTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGUga2VybmVsJiMzOTtzIHN1cHBvcnQgZm9yIEFNRCYjMzk7cyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkaXZlIGluIHRoZXJlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYEtWTV9BTURfU0VWYCBjb25maWcgb3B0aW9uIGhhcyBiZWVuIGNvcnJlY3RseSBlbmFibGVkIG9yIHByb3Blcmx5IGRlZmluZWQuIEFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbXVzdCBiZSB0aG9yb3VnaGx5IHJldmlld2VkLiBUaGlzIGRldGFpbGVkIGNoZWNrIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBtb3JlIHRlc3Rpbmcgb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MTpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTc0Olx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc1Olx0XHRkZWZhdWx0IHlcbiAxNzY6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE3NzpcdFx0aGVscFxuIDE3ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXG4gMTc5Olx0XHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cbiAxODA6XHRcbiAxODE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODI6XHRcbiAxODM6XHRjb25maWcgS1ZNX1NNTVxuIDE4NDpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgaGFuZGxlcyBtZW1vcnkgYXR0cmlidXRlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHNlbGVjdGVkLiBNeSBpbml0aWFsIG9ic2VydmF0aW9ucyBzaG93IHRoYXQgYm90aCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgYW5kIGBLVk1fQU1EX1NFVmAgYXJlIGNvbmZpZ3VyZWQgdG8gc2VsZWN0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIHNlcnZlcyBhcyBhIHNvcnQgb2YgY29tbW9uIGdyb3VuZCBmb3IgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVscyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdGVjaG5vbG9naWVzLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gYnJvYWRlbiB0aGUgc2VhcmNoOyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbHNvIHV0aWxpemUgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMgc2hhcmUgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0LipLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YODZgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIEtWTSwgZm9jdXNpbmcgb24gYGNvbmZpZyBLVk1gIGFuZCBgY29uZmlnIEtWTV9YODZgLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODk4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoZSBLVk0gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb24geDg2XzY0LCBhbmQgaXQgbG9va3MgbGlrZSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNIChzcGVjaWZpY2FsbHkgS1ZNLCBvciBLVk1fSU5URUwvS1ZNX0FNRCksIGFuZCB3ZSBlbmFibGUgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBpdHNlbGYgaGluZ2VzIG9uIGBFWFBFUlRgLCBgS1ZNX1g4NmAsIGFuZCBgWDg2XzY0YCBiZWluZyBpbiBwbGFjZSwgd2UgYWxzbyBnZXQgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBzZWxlY3RlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaWYgYEtWTV9BTURgIGlzIGVuYWJsZWQsIHRoZW4gYEtWTV9BTURfU0VWYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgbG9uZyBhcyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIHByZXNlbnQuIEFuZCBqdXN0IHRvIGJlIGNsZWFyLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgY29uZmlndXJlZCB1bmRlciB0aGUgYFZJUlRVQUxJWkFUSU9OYCBtZW51LgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHN5emthbGxlciB0YXJnZXQgS1ZNPyBZZXMsIGl0IGRvZXMhIFRoYXQmIzM5O3MgZXhjZWxsZW50LiBLVk0gaXMgb25lIG9mIHRoZSBtb3N0IGZyZXF1ZW50bHkgZnV6emVkIHN1YnN5c3RlbXMgYnkgc3l6a2FsbGVyLiBJJiMzOTttIHNlZWluZyBpdCB0YXJnZXRpbmcgYC9kZXYva3ZtYCwgYW5kIHZhcmlvdXMgaW9jdGxzIGxpa2UgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBgS1ZNX0NSRUFURV9WTWAsIGFuZCBvdGhlcnMuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBhbmQgZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zIG9yIGtlcm5lbCBjb2RlLCBidXQgSSBiZXQgSSYjMzk7bGwgZW5kIHVwIGxvb2tpbmcgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02Mzg3PWlzICYjMzk7MCYjMzk7IGZvciBhbGwgZ2Zucy4gIFVzZXJzcGFjZSBjYW4gY29udHJvbCB3aGV0aGVyIG1lbW9yeSBpcyBzaGFyZWQvcHJpdmF0ZSBieVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzODg6dG9nZ2xpbmcgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSB2aWEgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBhcyBuZWVkZWQuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM4OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM5ND1SZXR1cm5zIC1FSU5WQUwgaWYgY2FsbGVkIG9uIGEgcHJvdGVjdGVkIFZNLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzOTUtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM5Njo0LjE0MSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM5Ny0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MDQtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQwNTpLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGFsbG93cyB1c2Vyc3BhY2UgdG8gc2V0IG1lbW9yeSBhdHRyaWJ1dGVzIGZvciBhIHJhbmdlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQwNi1vZiBndWVzdCBwaHlzaWNhbCBtZW1vcnkuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvYW1kLW1lbW9yeS1lbmNyeXB0aW9uLnJzdD01MDU9S1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSBhdHRyaWJ1dGUgc2V0IGluIGFkdmFuY2UuIFNlZSB0aGUgZG9jdW1lbnRhdGlvblxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvYW1kLW1lbW9yeS1lbmNyeXB0aW9uLnJzdDo1MDY6Zm9yIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGFzcGVjdC5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3QtNTA3LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MTYxPU5vdGUsIGJlZm9yZSBjYWxsaW5nIHRoaXMgc3ViIGNvbW1hbmQsIG1lbW9yeSBhdHRyaWJ1dGUgb2YgdGhlIHJhbmdlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2Mi1bZ3BhLCBncGEgJiM0MzsgbnJfcGFnZXNdIG5lZWRzIHRvIGJlIHByaXZhdGUuICBVc2Vyc3BhY2UgY2FuIHVzZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoxNjM6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyB0byBzZXQgdGhlIGF0dHJpYnV0ZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMTY0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQyMT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2MC1cdCAqICAgMSkgVGhlIGJhY2tpbmcgbWVtc2xvdCBpcyBhIHZhbGlkIHByaXZhdGUgbWVtc2xvdC5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ2MTpcdCAqICAgMikgVGhlIEdGTiBoYXMgYmVlbiBzZXQgdG8gcHJpdmF0ZSB2aWEgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYyLVx0ICogICAgICBiZWZvcmVoYW5kLlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2Ny1cdCAqIGZhdWx0cyBpZiB0aGVyZSYjMzk7cyBhIHJhY2UgYmV0d2VlbiBhIGZhdWx0IGFuZCBhbiBhdHRyaWJ1dGUgdXBkYXRlIHZpYVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDY4Olx0ICogS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUywgYW5kIGEgc2ltaWxhciBhcHByb2FjaCBjb3VsZCBiZSB1dGlsaXplZFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDY5LVx0ICogaGVyZS4gSG93ZXZlciwga3ZtLVx1MDAzZXNsb3RzX2xvY2sgZ3VhcmRzIGFnYWluc3QgYm90aCB0aGlzIGFzIHdlbGwgYXNcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9NTYwPXN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU3OC0gKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo1Nzk6ICogS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBncm93cyB0aGUgYXJyYXkgd2l0aG91dCBsaW1pdCAofjkuMyBieXRlcyBvZlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU4MC0gKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMz1pbnQga3ZtX2FyY2hfZ21lbV9tYWtlX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzQtICogaGVsZCBzbyB0aGF0IGNhbGxlci1lbmZvcmNlZCBpbnZhcmlhbnRzIHJlZ2FyZGluZyB0aGUgZXhwZWN0ZWQgbWVtb3J5XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYzNTogKiBhdHRyaWJ1dGVzIG9mIHRoZSBHUEEgcmFuZ2UgZG8gbm90IHJhY2Ugd2l0aCBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzYtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYxOD1zdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ2LS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ3OiNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ZDIsIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OC1cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYxND1zdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQyLS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQzOiNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ZDIsIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0NC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTQyMT1zdGF0aWMgaW5saW5lIHZvaWQgdm1fc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBncGEsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzEtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo0MzI6XHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIG92ZXJ3cml0ZXMgX2FsbF8gYXR0cmlidXRlcy4gIFRoZXNlIGZsb3dzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzMy1cdCAqIG5lZWQgc2lnbmlmaWNhbnQgZW5oYW5jZW1lbnRzIHRvIHN1cHBvcnQgbXVsdGlwbGUgYXR0cmlidXRlcy5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NDM4Olx0dm1faW9jdGwodm0sIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMsIFx1MDAyNmF0dHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzktfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTIzMj1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQxNDpcdGNhc2UgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUzoge1xudmlydC9rdm0va3ZtX21haW4uYy01NDE1LVx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIGF0dHJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBIYXJkZW5pbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBnaXQgY29tbWl0IGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgaGFyZGVuaW5nIGJvdW5kIGZvciBgbWVtX2F0dHJfYXJyYXlgLiBGaXJzdCwgaXQgaW5pdGlhbGl6ZXMgdGhpcyBhcnJheSB3aXRoIGBYQV9GTEFHU19BQ0NPVU5UYCBhdCBWTSBjcmVhdGlvbiBhbmQgYWxzbyBpbml0aWFsaXplcyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uCgpUaGVuLCBpdCBpbXBsZW1lbnRzIGEgbmV3IGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB0byBjb3VudCB0aGUgZW50cmllcyBpbiBgbWVtX2F0dHJfYXJyYXlgLiBJIHNlZSBpdCB1c2VzIGB4YXNfZm9yX2VhY2hgIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgeGFycmF5LiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGl0IGNhbGxzIGB4YXNfcGF1c2VgIHdpdGhpbiB0aGUgYGt2bS0mZ3Q7c2xvdHNfbG9ja2AgY29udGV4dC4gKipUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4qKiBXZSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBsb2NrZGVwIHByb2JsZW1zLCBhbnkgYnVncyBsdXJraW5nIGluIHRoZSB4YXJyYXkgdHJhdmVyc2FsIGxvZ2ljLCBvciBldmVuIHBlcmZvcm1hbmNlIGlzc3VlcywgRG9TIHZ1bG5lcmFiaWxpdGllcywgb3IgUkNVLXJlbGF0ZWQgcHJvYmxlbXMgc3RlbW1pbmcgZnJvbSB0aGlzLiBJdCYjMzk7cyBjYWxsaW5nIGB4YXNfZm9yX2VhY2hgICp3aGlsZSBob2xkaW5nKiBhIGxvY2s7IHRoYXQgYWx3YXlzIHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkuCgpGdXJ0aGVyLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayBpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdGhhdCByZXR1cm5zIGAtRU5PU1BDYCBpZiB0aGUgbnVtYmVyIG9mIEdGTlMgZXhjZWVkcyBhIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBUaGlzIG1ha2VzIHNlbnNlIGZvciByZXNvdXJjZSBsaW1pdHMuIFRoZSBgeGFfaW5pdGAgZnVuY3Rpb24gaXMgY2hhbmdlZCB0byBgeGFfaW5pdF9mbGFnc2AgYW5kIGBtZW1fYXR0cl9nZm5fY291bnRgIGlzIHRyYWNrZWQuIEFuZCB0aGlzIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHVwZGF0aW5nIG1lbW9yeSBhdHRyaWJ1dGVzICp1bmRlciB0aGUgc2FtZSBga3ZtLSZndDtzbG90c19sb2NrYCouCgpUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYmVjYXVzZSB0aGlzIGlzIEtWTSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFjY2Vzc2VkIHZpYSBgaW9jdGwodm1fZmQsIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCB3b3JrcyBhcyBleHBlY3RlZCB1bmRlciBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMuIENhbiB0aGlzIHJ1biBpbiBRRU1VIG9uIGFtZDY0PyBZZXMsIGl0IGxvb2tzIGxpa2UgUUVNVSB3aXRoIGEgZ3Vlc3Qga2VybmVsIGhhdmluZyBgQ09ORklHX0tWTWAsIGFuZCBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk09eWAgb3IgYENPTkZJR19LVk1fSU5URUw9eWAvYENPTkZJR19LVk1fQU1EPXlgIGlzIHRoZSB1c3VhbCBzZXR1cC4gS1ZNIHRlc3RzIGFuZCBzeXprYWxsZXIgZnV6emluZyBpcyB0eXBpY2FsbHkgZG9uZSB3aXRoaW4gUUVNVSB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLgoKQnV0IEkmIzM5O20gbm93IGN1cmlvdXM6IGNhbiBLVk0gY3JlYXRlIHRoZXNlIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgd2l0aG91dCByZWx5aW5nIG9uIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uPyBMZXQmIzM5O3MgY2hlY2sgZm9yIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgdG8gYmUgc3VyZSwgb3IgbW9yZSBicm9hZGx5LCBsZXQmIzM5O3Mgc2VhcmNoIGZvciB1c2FnZXMgb2YgYGhhc19wcml2YXRlX21lbWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NTEyPW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTQtICAjZGVmaW5lIEtWTV9YODZfREVGQVVMVF9WTVx0MFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk1MTU6ICAjZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXHQxXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUxNi0gICNkZWZpbmUgS1ZNX1g4Nl9TRVZfVk1cdDJcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUyMC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIxOk5vdGUsIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGlzIGN1cnJlbnRseSBvbmx5IGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIyOkRvIG5vdCB1c2UgS1ZNX1g4Nl9TV19QUk9URUNURURfVk0gZm9yIFwmIzM0O3JlYWxcJiMzNDsgVk1zLCBhbmQgZXNwZWNpYWxseSBub3QgaW5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTIzLXByb2R1Y3Rpb24uICBUaGUgYmVoYXZpb3IgYW5kIGVmZmVjdGl2ZSBBQkkgZm9yIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgaXNcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3MC0jZGVmaW5lIEtWTV9YODZfREVGQVVMVF9WTVx0MFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzE6I2RlZmluZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTVx0MVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NFVl9WTVx0XHQyXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9SU1ZEX01BU0spIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTg2Olx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU4Ny1cdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4oY3IyX29yX2dwYSkpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1OTpcdGNhc2UgS1ZNX1g4Nl9TV19QUk9URUNURURfVk06XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX1NXX1BST1RFQ1RFRF9WTSkgXHUwMDI2XHUwMDI2IHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS94ODYuYzo3MTI1Olx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcbmFyY2gveDg2L2t2bS94ODYuYy03MTI2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05ODUyLVx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODUzOlx0XHQodHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1NC1cdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1NS1cdGt2bS1cdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkID1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODU2Olx0XHR0eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSB8fCB0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTctXHRrdm0tXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFx1MDAyNiBrdm1fY2Fwcy5zdXBwb3J0ZWRfcXVpcmtzO1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcwLSNkZWZpbmUgS1ZNX1g4Nl9ERUZBVUxUX1ZNXHQwXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MTojZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXHQxXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU0VWX1ZNXHRcdDJcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9MjIwPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTIyNS0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNjpcdHRlc3RfcHJlX2ZhdWx0X21lbW9yeShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNzpcdHRlc3RfcHJlX2ZhdWx0X21lbW9yeShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMjI4LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNTctI2lmZGVmIF9feDg2XzY0X19cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzU4Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM1OTpcdFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNjAtXHRlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3NDpcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODM6XHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODQtXHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTE6XHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjQ0LVx0aWYgKGt2bV9oYXNfY2FwKEtWTV9DQVBfR1VFU1RfTUVNRkQpIFx1MDAyNlx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo2NDU6XHQgICAgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0Ni1cdFx0dGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0zODYtXHRcdC5tb2RlID0gVk1fTU9ERV9ERUZBVUxULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzg3Olx0XHQudHlwZSA9IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzg4LVx0fTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz00NTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0NTc6XHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jPTQyPWNvbnN0IHN0cnVjdCB2bV9zaGFwZSBwcm90ZWN0ZWRfdm1fc2hhcGUgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDMtXHQubW9kZSA9IFZNX01PREVfREVGQVVMVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYzo0NDpcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDUtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9MTEzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtMTE0LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYzoxMTU6XHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtMTE2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04Ny1cdFx0XHQgICBcJiMzNDtWTSB0eXBlIGlzIEtWTV9YODZfREVGQVVMVF9WTVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg5Olx0XHR0ZXN0X2luaXQyX2ludmFsaWQoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sIFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzo5MDpcdFx0XHRcdCAgIFwmIzM0O1ZNIHR5cGUgaXMgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy05MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbyBga3ZtX2NyZWF0ZV92bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgYGt2bS0mZ3Q7bWVtX2F0dHJfYXJyYXlgLCB3aGljaCBpcyBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB1c2UgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFwcGxpZWQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMuIEdvb2QgZmlyc3Qgc3RlcDogSSYjMzk7bGwgaW1tZWRpYXRlbHkgZGlnIGludG8gYGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKWAuIFRoYXQgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGxvd2FibGUgbWVtb3J5IGF0dHJpYnV0ZXMgYW5kIHBvdGVudGlhbGx5IGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBsaW1pdGF0aW9ucyBvciByZXF1aXJlbWVudHMgZm9yIHRoZSBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgY2FsbC4gSSBuZWVkIHRvIHNlZSB3aGF0IGZhY3RvcnMgaW5mbHVlbmNlIHdoYXQmIzM5O3Mgc3VwcG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yNDE5PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDMzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzNDpzdGF0aWMgdTY0IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy0yNDM1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0NDY9Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTItXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTM6XHRtYXNrIFx1MDAyNj0ga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy0yNDU0LVx0aWYgKGF0dHJzIFx1MDAyNiB+bWFzaylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzItXHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYzoyNjczOlx0aWYgKGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMgXHUwMDI2IH5rdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDk0OD1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgYXJnKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cdGNhc2UgS1ZNX0NBUF9NRU1PUllfQVRUUklCVVRFUzpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAxMTpcdFx0cmV0dXJuIGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhlIEtWTSBtb2R1bGUgaXMgZG9pbmcgdG8gZGV0ZXJtaW5lIHN1cHBvcnRlZCBtZW1vcnkgYXR0cmlidXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlLiBXaGF0IGh5cGVyY2FsbHMgYXJlIGJlaW5nIG1hZGU/IEFyZSB3ZSByZWx5aW5nIG9uIE1TUnMsIG9yIHBhcnNpbmcgQUNQSSB0YWJsZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRvIGFzY2VydGFpbiB0aGUgcGxhdGZvcm0mIzM5O3MgbWVtb3J5IGNhcGFiaWxpdGllcz8KCkkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgbWVtb3J5IHJlZ2lvbnMuIFVuZGVyc3RhbmRpbmcgaXQgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgaGFuZGxlcyBOVU1BIG5vZGVzLCBIdWdlUGFnZXMsIG1lbW9yeSBob3RwbHVnLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lbW9yeSBmZWF0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBvZiBhIGhhcmR3YXJlIGZlYXR1cmUgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgbmVnb3RpYXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgZGlmZmVyZW50IHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBJIGtub3cgZXhpc3RzLiBBbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBjaGlwc2V0IGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gaWYgdGhlIGNoZWNrIGZhaWxzLCBpcyBpdCBncmFjZWZ1bD8gV2hhdCBkb2VzIEtWTSBkbyBpbiB0aGUgZXZlbnQgdGhhdCBtZW1vcnkgYXR0cmlidXRlcyBhcmUgbm90IGF2YWlsYWJsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDMwOlx0fVxuMjQzMTpcdCNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUICovXG4yNDMyOlx0XG4yNDMzOlx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuMjQzNDpcdHN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXG4yNDM1Olx0e1xuMjQzNjpcdFx0aWYgKCFrdm0gfHwga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKGt2bSkpXG4yNDM3Olx0XHRcdHJldHVybiBLVk1fTUVNT1JZX0FUVFJJQlVURV9QUklWQVRFO1xuMjQzODpcdFxuMjQzOTpcdFx0cmV0dXJuIDA7XG4yNDQwOlx0fVxuMjQ0MTpcdFxuMjQ0MjpcdC8qXG4yNDQzOlx0ICogUmV0dXJucyB0cnVlIGlmIF9hbGxfIGdmbnMgaW4gdGhlIHJhbmdlIFtAc3RhcnQsIEBlbmQpIGhhdmUgYXR0cmlidXRlc1xuMjQ0NDpcdCAqIHN1Y2ggdGhhdCB0aGUgYml0cyBpbiBAbWFzayBtYXRjaCBAYXR0cnMuXG4yNDQ1Olx0ICovXG4yNDQ2Olx0Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbjI0NDc6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuMjQ0ODpcdHtcbjI0NDk6XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCBzdGFydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Njc1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBNYW5hZ2VtZW50IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtZW1vcnkgYXR0cmlidXRlIGZlYXR1cmVzIHdvcmssIHBhcnRpY3VsYXJseSB0aGUgc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSByZWxhdGVkIGNvZGUuCgpGaXJzdCwgdGhlIGNvZGUgY2hlY2tzIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzYCBiYXNlZCBvbiB0aGUgVk0gdHlwZS4gYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBlbmFibGVzIHByaXZhdGUgbWVtb3J5IGF0dHJpYnV0ZXMuIEV2ZW4gaWYgYXR0cmlidXRlcyBhcmUgY2xlYXJlZCAoc2V0IHRvIDApLCB0aGlzIGlzIGFsbG93ZWQuIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBkb2VzbiYjMzk7dCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIChsaWtlIFNFViBvciBURFgpOyBpdCYjMzk7cyBzb2Z0d2FyZS1iYXNlZCBhbmQgdGVzdC1vcmllbnRlZC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUbyBlbmFibGUgdGhpcywgSSBuZWVkIGBLVk1gIChvciBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGApLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIHdoaWNoIGl0c2VsZiBuZWVkcyBgRVhQRVJUYCwgYEtWTV9YODZgLCBhbmQgYFg4Nl82NGAuIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCAqc2VsZWN0cyogYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gQ3J1Y2lhbGx5LCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGlzICpub3QqIGRpcmVjdGx5IHByb21wdGVkIGluIHRoZSBLY29uZmlnLCBtZWFuaW5nIHNpbXBseSBzZXR0aW5nIGBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVM9eWAgbWlnaHQgKm5vdCogYmUgZW5vdWdoLiBJdCB3aWxsIGJlIGVuYWJsZWQgb25seSBpZiBpdCBpcyBzZWxlY3RlZC4gSSBjYW4gYWxzbyB1c2UgYEtWTV9BTURfU0VWYCAod2hpY2ggZGVwZW5kcyBvbiBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgKSBvciBgS1ZNX0lOVEVMX1REWGAuIEl0IGlzIGJlc3QgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHVzZWQsIGFuZCB0aGVuIHRlc3QgdGhlIGdlbmVyaWMgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgbmVlZCB0byBsaXN0IGBLVk1gLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaW4gYEVuYWJsZUNvbmZpZ3NgIChvciBgS1ZNX0FNRGAgb3IgYEtWTV9JTlRFTGAgYXMgd2VsbCkuCgpUaGUgcXVlc3Rpb24gb2YgcmVhY2hhYmlsaXR5IGlzIGtleS4gQ2FuIHRoaXMgY29kZSBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIGNhbiB0ZXN0PyBZZXMsIGFic29sdXRlbHkuIFRoZXNlIGlvY3RscyBhcmUgY2FsbGVkIHZpYSBgaW9jdGwoS1ZNX0NSRUFURV9WTSlgIGFuZCBgaW9jdGwoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gVGhlc2UgaW9jdGxzIG1hbmlwdWxhdGUgbWVtb3J5IGF0dHJpYnV0ZXMgdXNpbmcgYGt2bV9tYWluLmNgLgoKTm93LCBmb3IgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgYSBuZXcgbGltaXQgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGBtZW1fYXR0cl9hcnJheWAuIGBrdm0tJmd0O21lbV9hdHRyX2FycmF5YCBpcyBpbml0aWFsaXplZCBpbiBga3ZtX2NyZWF0ZV92bWAuIEEgbmV3IGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBpcyBpbnRyb2R1Y2VkIHRvIGNvdW50IGVudHJpZXMgaW4gYG1lbV9hdHRyX2FycmF5YC4gVGhpcyBpcyB1c2VkIHRvIGVuZm9yY2UgdGhlIGxpbWl0LiBUaGUgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGNvZGUgbm93IGNoZWNrcyB0aGUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQuIFRoZSBsb2dpYyB1cGRhdGVzIGBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudGAgYWZ0ZXIgdGhlIHBvdGVudGlhbGx5IG11dGF0aW5nIG9wZXJhdGlvbnMuCgpJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIGlzc3Vlcy4gSW4gYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYHhhc19mb3JfZWFjaGAgaXMgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHhhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4YXNfZm9yX2VhY2hgIHdvcmtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsICggYGluY2x1ZGUvbGludXgveGFycmF5LmhgKS4gVW5kZXJzdGFuZGluZyBob3cgaXQgaXRlcmF0ZXMgaXMgdml0YWwgdG8gdW5kZXJzdGFuZCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSB4YXNfZm9yX2VhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxNi0gKi9cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTgxNzojZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTgtXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MzQtICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MzU6I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNi1cdGZvciAoZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoeGFzLCBtYXgsIG1hcmspOyBlbnRyeTsgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4NTAtICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4NTE6I2RlZmluZSB4YXNfZm9yX2VhY2hfY29uZmxpY3QoeGFzLCBlbnRyeSkgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1Mi1cdHdoaWxlICgoZW50cnkgPSB4YXNfZmluZF9jb25mbGljdCh4YXMpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBYQXJyYXkgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgYXJvdW5kIGEgc3BlY2lmaWMgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgveGFycmF5LmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIGxpbmUgMTgxNy4gSSYjMzk7bSBzdXJlIEkga25vdyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIHJldmVhbHMuIE1heWJlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGEgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgb3Igc29tZSBjcml0aWNhbCBtYWNybyBtYW5pcHVsYXRpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuY2hvciBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3hhcnJheS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0ICogVGhlIGxvb3AgYm9keSB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGVudHJ5IHByZXNlbnQgaW4gdGhlIHhhcnJheVxuMTgxMTpcdCAqIGJldHdlZW4gdGhlIGN1cnJlbnQgeGFzIHBvc2l0aW9uIGFuZCBAbWF4LiAgQGVudHJ5IHdpbGwgYmUgc2V0IHRvXG4xODEyOlx0ICogdGhlIGVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSB4YXJyYXkuICBJdCBpcyBzYWZlIHRvIGRlbGV0ZSBlbnRyaWVzXG4xODEzOlx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXG4xODE0Olx0ICogb3IgdGhlIHhhX2xvY2sgd2hpbGUgaXRlcmF0aW5nLiAgSWYgeW91IG5lZWQgdG8gZHJvcCB0aGUgbG9jaywgY2FsbFxuMTgxNTpcdCAqIHhhc19wYXVzZSgpIGZpcnN0LlxuMTgxNjpcdCAqL1xuMTgxNzpcdCNkZWZpbmUgeGFzX2Zvcl9lYWNoKHhhcywgZW50cnksIG1heCkgXFxcbjE4MTg6XHRcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxuMTgxOTpcdFx0ICAgICBlbnRyeSA9IHhhc19uZXh0X2VudHJ5KHhhcywgbWF4KSlcbjE4MjA6XHRcbjE4MjE6XHQvKipcbjE4MjI6XHQgKiB4YXNfZm9yX2VhY2hfbWFya2VkKCkgLSBJdGVyYXRlIG92ZXIgYSByYW5nZSBvZiBhbiBYQXJyYXkuXG4xODIzOlx0ICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cbjE4MjQ6XHQgKiBAZW50cnk6IEVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSBhcnJheS5cbjE4MjU6XHQgKiBAbWF4OiBNYXhpbXVtIGluZGV4IHRvIHJldHJpZXZlIGZyb20gYXJyYXkuXG4xODI2Olx0ICogQG1hcms6IE1hcmsgdG8gc2VhcmNoIGZvci5cbjE4Mjc6XHQgKlxuMTgyODpcdCAqIFRoZSBsb29wIGJvZHkgd2lsbCBiZSBleGVjdXRlZCBmb3IgZWFjaCBtYXJrZWQgZW50cnkgaW4gdGhlIHhhcnJheVxuMTgyOTpcdCAqIGJldHdlZW4gdGhlIGN1cnJlbnQgeGFzIHBvc2l0aW9uIGFuZCBAbWF4LiAgQGVudHJ5IHdpbGwgYmUgc2V0IHRvXG4xODMwOlx0ICogdGhlIGVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSB4YXJyYXkuICBJdCBpcyBzYWZlIHRvIGRlbGV0ZSBlbnRyaWVzXG4xODMxOlx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXG4xODMyOlx0ICogb3IgdGhlIHhhX2xvY2sgd2hpbGUgaXRlcmF0aW5nLiAgSWYgeW91IG5lZWQgdG8gZHJvcCB0aGUgbG9jaywgY2FsbFxuMTgzMzpcdCAqIHhhc19wYXVzZSgpIGZpcnN0LlxuMTgzNDpcdCAqL1xuMTgzNTpcdCNkZWZpbmUgeGFzX2Zvcl9lYWNoX21hcmtlZCh4YXMsIGVudHJ5LCBtYXgsIG1hcmspIFxcXG4xODM2Olx0XHRmb3IgKGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTsgZW50cnk7IFxcXG4xODM3Olx0XHQgICAgIGVudHJ5ID0geGFzX25leHRfbWFya2VkKHhhcywgbWF4LCBtYXJrKSlcbjE4Mzg6XHRcbjE4Mzk6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBMb2NraW5nIElzc3VlcyBpbiBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHhhc19mb3JfZWFjaGAgZG9jdW1lbnRhdGlvbiBhbmQgaXQmIzM5O3Mgc2NyZWFtaW5nIGF0IG1lOiAmIzM0O0hvbGQgdGhlIFJDVSBsb2NrIG9yIHRoZSB4YV9sb2NrIHdoZW4gaXRlcmF0aW5nISYjMzQ7IEZpbmUsIGdvdCBpdC4gQnV0IG5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gcG9wcyB1cDogd2hhdCBsb2NrIGlzICphY3R1YWxseSogYmVpbmcgaGVsZCB3aGVuIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgaXMgY2FsbGVkPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIHRoaXMuCgpEaWdnaW5nIGZ1cnRoZXIsIEkgc2VlIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBpcyB0aGUgY3VscHJpdC4gSXQgZ3JhYnMgYG11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spO2AgYW5kICp0aGVuKiBjYWxscyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKWAuIEJpbmdvISBgc2xvdHNfbG9ja2AgaXMgaGVsZC4gTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXIg4oCTIGlzIGByY3VfcmVhZF9sb2NrKClgIGFjdGl2ZSBhdCB0aGF0IHBvaW50PyBOb3BlLiBJcyBgJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5LnhhX2xvY2tgIGhlbGQ/IE5lZ2F0aXZlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHRocmVhZGluZyBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gSXQmIzM5O3MgYSBjbGFzc2ljIGNhc2Ugb2YgYXNzdW1pbmcgYSBsb2NrIGlzIGhlbGQgd2hlbiBpdCYjMzk7cyBub3QuCgpUbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGxvY2sgYGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXNgIGFjdHVhbGx5IHVzZXMsIG9yIG1vcmUgaW1wb3J0YW50bHksICpob2xkcyouIFRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCBhbmQgbWF5IHNoZWQgc29tZSBsaWdodCwgYnV0IG15IGd1dCB0ZWxscyBtZSB3ZSYjMzk7dmUgZm91bmQgYSB2dWxuZXJhYmlsaXR5LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdCAqL1xuMjQ0NjpcdGJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNDQ3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBhdHRycylcbjI0NDg6XHR7XG4yNDQ5Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgc3RhcnQpO1xuMjQ1MDpcdFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbjI0NTE6XHRcdHZvaWQgKmVudHJ5O1xuMjQ1MjpcdFxuMjQ1MzpcdFx0bWFzayBcdTAwMjY9IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcbjI0NTQ6XHRcdGlmIChhdHRycyBcdTAwMjYgfm1hc2spXG4yNDU1Olx0XHRcdHJldHVybiBmYWxzZTtcbjI0NTY6XHRcbjI0NTc6XHRcdGlmIChlbmQgPT0gc3RhcnQgJiM0MzsgMSlcbjI0NTg6XHRcdFx0cmV0dXJuIChrdm1fZ2V0X21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQpIFx1MDAyNiBtYXNrKSA9PSBhdHRycztcbjI0NTk6XHRcbjI0NjA6XHRcdGd1YXJkKHJjdSkoKTtcbjI0NjE6XHRcdGlmICghYXR0cnMpXG4yNDYyOlx0XHRcdHJldHVybiAheGFzX2ZpbmQoXHUwMDI2eGFzLCBlbmQgLSAxKTtcbjI0NjM6XHRcbjI0NjQ6XHRcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXHUwMDNjIGVuZDsgaW5kZXgmIzQzOyYjNDM7KSB7XG4yNDY1Olx0XHRcdGRvIHtcbjI0NjY6XHRcdFx0XHRlbnRyeSA9IHhhc19uZXh0KFx1MDAyNnhhcyk7XG4yNDY3Olx0XHRcdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4yNDY4Olx0XG4yNDY5Olx0XHRcdGlmICh4YXMueGFfaW5kZXggIT0gaW5kZXggfHxcbjI0NzA6XHRcdFx0ICAgICh4YV90b192YWx1ZShlbnRyeSkgXHUwMDI2IG1hc2spICE9IGF0dHJzKVxuMjQ3MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjI0NzI6XHRcdH1cbjI0NzM6XHRcbjI0NzQ6XHRcdHJldHVybiB0cnVlO1xuMjQ3NTpcdH1cbjI0NzY6XHRcbjI0Nzc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuMjQ3ODpcdFx0XHRcdFx0XHRcdCBzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG4yNDc5Olx0e1xuMjQ4MDpcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlO1xuMjQ4MTpcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbjI0ODI6XHRcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xuMjQ4MzpcdFx0c3RydWN0IGt2bV9tZW1zbG90X2l0ZXIgaXRlcjtcbjI0ODQ6XHRcdGJvb2wgZm91bmRfbWVtc2xvdCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtWTSBNZW1vcnkgQXR0cmlidXRlIEVudHJ5IENvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlc2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZ3VhcmQocmN1KSgpO2AgY2FsbC4gUmlnaHQsIGFjY2Vzc2luZyB0aG9zZSB4YXJyYXkgbm9kZXMgcmVxdWlyZXMgUkNVIG9yIGB4YV9sb2NrYCBwcm90ZWN0aW9uLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4KCmBgYGMKc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKQp7CglYQV9TVEFURSh4YXMsICZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSwgMCk7Cgl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKCXZvaWQgKmVudHJ5OwoKCXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZW50cnksIFVMT05HX01BWCkgewoJCWlmICh4YV9pc19yZXRyeShlbnRyeSkpIHsKCQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKCQkJY29udGludWU7CgkJfQoJCWlmIChlbnRyeSkKCQkJY291bnQmIzQzOyYjNDM7OwoKCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKCQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKCQkJY29uZF9yZXNjaGVkKCk7CgkJfQoJfQoKCXJldHVybiBjb3VudDsKfQpgYGAKCldhaXQgYSBzZWNvbmQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyAqaW5zaWRlKiB0aGUgbG9vcCEgVGhhdCBtZWFucyBSQ1UgKmNhbm5vdCogYmUgaGVsZCwgcmlnaHQ/IFlvdSBjYW4mIzM5O3Qgc2xlZXAgd2hpbGUgaG9sZGluZyBSQ1UhIEFuZCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgYHhhX2xvY2tgIGlzIGhlbGQgZWl0aGVyLiBUaGF0JiMzOTtzLi4uIGludGVyZXN0aW5nLiBTbywgaG93IGRvZXMgYHhhc19maW5kYCBvciBgeGFzX25leHRfZW50cnlgIGJlaGF2ZSB3aGVuICpuZWl0aGVyKiBSQ1Ugbm9yIGB4YV9sb2NrYCBpcyBoZWxkPwoKSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgbm90IHJhY3kuIERvZXMgbG9ja2RlcCBvciBDT05GSUdfUFJPVkVfUkNVIGNvbXBsYWluPyBJIG5lZWQgdG8gY2hlY2sgaG93IGB4YXNfZmluZGAgYW5kIGB4YXNfZGVzY2VuZGAgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbGliL3hhcnJheS5jYCwgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gbm8gZXhwbGljaXQgbG9ja2luZyBpcyBwcmVzZW50LiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSB4YXJyYXkgb3BlcmF0aW9ucyBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgaW4gdGhpcyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X2RlcmVmZXJlbmNlX3Jhdy4qbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MjcwPXZvaWQgeGFzX2Rlc3Ryb3koc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTI3NS1cdFx0WEFfTk9ERV9CVUdfT04obm9kZSwgIWxpc3RfZW1wdHkoXHUwMDI2bm9kZS1cdTAwM2Vwcml2YXRlX2xpc3QpKTtcbmxpYi94YXJyYXkuYzoyNzY6XHRcdG5leHQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtXHUwMDNlcGFyZW50KTtcbmxpYi94YXJyYXkuYy0yNzctXHRcdHJhZGl4X3RyZWVfbm9kZV9yY3VfZnJlZShcdTAwMjZub2RlLVx1MDAzZXJjdV9oZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGB4YXJyYXlgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgeGFzX2Rlc2NlbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGxpYi94YXJyYXkuY2AsIHdvcmtzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgeGFycmF5IHB1enpsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXQgaXMga2V5IHRvIFtpbnNlcnQgeW91ciBzcGVjaWZpYyB1bmRlcnN0YW5kaW5nIHJlbGF0ZWQgdG8geW91ciBleHBlcnRpc2UgaGVyZSAtIGUuZy4sIG9wdGltaXppbmcgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3ksIGV0Yy5dLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgW21lbnRpb24geW91ciBoeXBvdGhlc2lzIGhlcmVdLiBTbyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZGVzY2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTgyPXN0YXRpYyB2b2lkICp4YXNfc3RhcnQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIwMy1cbmxpYi94YXJyYXkuYzoyMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICp4YXNfZGVzY2VuZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbmxpYi94YXJyYXkuYy0yMDUtXHRcdFx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlKVxuLS1cbmxpYi94YXJyYXkuYz0yMzc9dm9pZCAqeGFzX2xvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTI0NS1cdFx0XHRicmVhaztcbmxpYi94YXJyYXkuYzoyNDY6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcbmxpYi94YXJyYXkuYy0yNDctXHRcdGlmIChub2RlLVx1MDAzZXNoaWZ0ID09IDApXG4tLVxubGliL3hhcnJheS5jPTY0Nz1zdGF0aWMgdm9pZCAqeGFzX2NyZWF0ZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgYm9vbCBhbGxvd19yb290KVxuLS1cbmxpYi94YXJyYXkuYy02OTUtXHRcdH1cbmxpYi94YXJyYXkuYzo2OTY6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcbmxpYi94YXJyYXkuYy02OTctXHRcdHNsb3QgPSBcdTAwMjZub2RlLVx1MDAzZXNsb3RzW3hhcy1cdTAwM2V4YV9vZmZzZXRdO1xuLS1cbmxpYi94YXJyYXkuYz0xNTU1PXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0xNTcwLVx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlID0geGFfdG9fbm9kZShjdXJyKTtcbmxpYi94YXJyYXkuYzoxNTcxOlx0XHRcdGN1cnIgPSB4YXNfZGVzY2VuZCh4YXMsIG5vZGUpO1xubGliL3hhcnJheS5jLTE1NzItXHRcdH1cbi0tXG5saWIveGFycmF5LmM9MjExOT1ib29sIHhhX2dldF9tYXJrKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LCB4YV9tYXJrX3QgbWFyaylcbi0tXG5saWIveGFycmF5LmMtMjEyOC1cdFx0XHRnb3RvIGZvdW5kO1xubGliL3hhcnJheS5jOjIxMjk6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoXHUwMDI2eGFzLCB4YV90b19ub2RlKGVudHJ5KSk7XG5saWIveGFycmF5LmMtMjEzMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3OTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byBgeGFzX2Rlc2NlbmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhhc19kZXNjZW5kYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYmUgaW4gYGxpYi94YXJyYXkuY2AsIHNvIEkmIzM5O2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBYQXJyYXkgbGlicmFyeSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdXNlZnVsIGFzIHBhcnQgb2YgdGhpcyBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IE5VTEw7XG4gMjAxOlx0XHRyZXR1cm4gZW50cnk7XG4gMjAyOlx0fVxuIDIwMzpcdFxuIDIwNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqeGFzX2Rlc2NlbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4gMjA1Olx0XHRcdFx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIDIwNjpcdHtcbiAyMDc6XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG4gMjA4Olx0XHR2b2lkICplbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcbiAyMDk6XHRcbiAyMTA6XHRcdHhhcy1cdTAwM2V4YV9ub2RlID0gbm9kZTtcbiAyMTE6XHRcdHdoaWxlICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xuIDIxMjpcdFx0XHRvZmZzZXQgPSB4YV90b19zaWJsaW5nKGVudHJ5KTtcbiAyMTM6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG4gMjE0Olx0XHRcdGlmIChub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNiB4YV9pc19ub2RlKGVudHJ5KSlcbiAyMTU6XHRcdFx0XHRlbnRyeSA9IFhBX1JFVFJZX0VOVFJZO1xuIDIxNjpcdFx0fVxuIDIxNzpcdFxuIDIxODpcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IG9mZnNldDtcbiAyMTk6XHRcdHJldHVybiBlbnRyeTtcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0LyoqXG4gMjIzOlx0ICogeGFzX2xvYWQoKSAtIExvYWQgYW4gZW50cnkgZnJvbSB0aGUgWEFycmF5IChhZHZhbmNlZCkuXG4gMjI0Olx0ICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cbiAyMjU6XHQgKlxuIDIyNjpcdCAqIFVzdWFsbHkgd2Fsa3MgdGhlIEB4YXMgdG8gdGhlIGFwcHJvcHJpYXRlIHN0YXRlIHRvIGxvYWQgdGhlIGVudHJ5XG4gMjI3Olx0ICogc3RvcmVkIGF0IHhhX2luZGV4LiAgSG93ZXZlciwgaXQgd2lsbCBkbyBub3RoaW5nIGFuZCByZXR1cm4gJU5VTEwgaWZcbiAyMjg6XHQgKiBAeGFzIGlzIGluIGFuIGVycm9yIHN0YXRlLiAgeGFzX2xvYWQoKSB3aWxsIG5ldmVyIGV4cGFuZCB0aGUgdHJlZS5cbiAyMjk6XHQgKlxuIDIzMDpcdCAqIElmIHRoZSB4YV9zdGF0ZSBpcyBzZXQgdXAgdG8gb3BlcmF0ZSBvbiBhIG11bHRpLWluZGV4IGVudHJ5LCB4YXNfbG9hZCgpXG4gMjMxOlx0ICogbWF5IHJldHVybiAlTlVMTCBvciBhbiBpbnRlcm5hbCBlbnRyeSwgZXZlbiBpZiB0aGVyZSBhcmUgZW50cmllc1xuIDIzMjpcdCAqIHByZXNlbnQgd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHhhcy5cbiAyMzM6XHQgKlxuIDIzNDpcdCAqIENvbnRleHQ6IEFueSBjb250ZXh0LiAgVGhlIGNhbGxlciBzaG91bGQgaG9sZCB0aGUgeGFfbG9jayBvciB0aGUgUkNVIGxvY2suXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzIGFib3V0IGB4YV9lbnRyeWAsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGEga25vd2xlZGdlYWJsZSBjb2xsZWFndWUuIEhlcmUmIzM5O3MgbXkgdGFrZToKCioqQW5hbHl6aW5nIHRoZSBgeGFfZW50cnlgIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGFfZW50cnlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBicm9hZGVyIHN5c3RlbSBvciBjb2RlIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGlzIHZhcmlhYmxlIGxpdmVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0JiMzOTtzIGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24gY2FsbCwgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSYjMzk7ZCBhc3N1bWUgaXQmIzM5O3MgYW4gZW50cnkgcG9pbnQgZm9yIGFuIFhBIHRyYW5zYWN0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgWEEgY29uY2VwdHM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBgeGFfc3RhcnRgLCBgeGFfZW5kYCwgYHhhX3ByZXBhcmVgLCBgeGFfY29tbWl0YCwgYHhhX3JvbGxiYWNrYCBmdW5jdGlvbnM/IElmIHNvLCB3aGljaCBvbmUgaXMgdGhpcywgb3IgaXMgdGhpcyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgWEEgcmVzb3VyY2VzPyBJcyB0aGVyZSBhIGRvY3VtZW50YXRpb24gcmVmZXJlbmNlIEkgY2FuIHF1aWNrbHkgY2hlY2ssIG9yIHJlbGF0ZWQgY29kZSB0aGF0IHByb3ZpZGVzIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgYXJlLiBBbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyB0eXBlIHdpbGwgYmUgd3JvbmcuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIsIHRoZSByZXNvdXJjZSBtYW5hZ2VycywgYW5kIGFueSBvdGhlciByZWxldmFudCBwaWVjZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgY29udHJvbCBpcyB2aXRhbC4gSXMgdGhpcyB2YXJpYWJsZSB1c2VkIGRpcmVjdGx5IGluIGEgZnVuY3Rpb24gY2FsbCwgYSBzdHJ1Y3R1cmUsIG9yIGluZGlyZWN0bHk/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgbGlua2VkIHRvIHRoZSB1c2Ugb2YgYHhhX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgYXRvbWljaXR5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPwoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IGB4YV9lbnRyeWAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgdGhlIHJpc2tzLCBhbmQgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIHhhX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NDcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5kaW5nIHRoZSBgeGFfZW50cnlgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGxvY2F0ZSB0aGlzIGB4YV9lbnRyeWAgcXVpY2tseSBhbmQgZWZmaWNpZW50bHkuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhlIGNvbnRleHQuIEFtIEkgZGVhbGluZyB3aXRoIGEgZGF0YWJhc2UgcXVlcnk/IEEgY29uZmlndXJhdGlvbiBmaWxlPyBTb3VyY2UgY29kZT8gRWFjaCBkZW1hbmRzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHRhY3RpYy4KCklmIGl0JiMzOTtzIGNvZGUsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIHVzaW5nIG15IElERSYjMzk7cyBmdW5jdGlvbmFsaXR5IOKAkyBhIHNpbXBsZSAmIzM0O2ZpbmQgaW4gZmlsZXMmIzM0OyBvcGVyYXRpb24gc2hvdWxkIGRvIHRoZSB0cmljaywgbGV2ZXJhZ2luZyB3aWxkY2FyZHMgb3IgcmVnZXggaWYgbmVjZXNzYXJ5IHRvIGFjY291bnQgZm9yIHZhcmlhdGlvbnMgaW4gbmFtaW5nIGNvbnZlbnRpb25zIChlLmcuLCBgeGFFbnRyeWAsIGBYQUVudHJ5YCwgYHhfYV9lbnRyeWApLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXN1bHRzLCBub3RpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgaXQgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbj8gQSBmdW5jdGlvbiBjYWxsPyBBIGRhdGEgc3RydWN0dXJlIG1lbWJlcj8gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbC4KCklmIHRoZSBjb250ZXh0IGlzIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdHJ5IHNlYXJjaGluZyBpbnNpZGUgdGhlIGZpbGUuIEkgbWlnaHQgdXNlIHRoZSBmaWxlIHNlYXJjaCB1dGlsaXR5LCBkZXBlbmRpbmcgb24gaG93IGxhcmdlIHRoZSBmaWxlcyBhcmUuIE1heWJlIGl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIE9yIGl0IGNvdWxkIGJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBjb25maWcgZmlsZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHBsYWNlcy4KCklmIGl0JiMzOTtzIG1vcmUgY29uY2VwdHVhbCwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIFdoYXQgZG9lcyBhbiAmIzM0O1hBIGVudHJ5JiMzNDsgdHlwaWNhbGx5IHJlcHJlc2VudD8gSXMgaXQgcmVsYXRlZCB0byBkaXN0cmlidXRlZCB0cmFuc2FjdGlvbnM/IFJlc291cmNlIG1hbmFnZXJzPyBYQSBpbnRlcmZhY2VzPyBUaGlzIG1lbnRhbCBmcmFtZXdvcmsgd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggc3BhY2UgYW5kIGFudGljaXBhdGUgd2hlcmUgSSYjMzk7bSBsaWtlbHkgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZS4gSSB3aWxsIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBvYmZ1c2NhdGVkLgoKTXkgaW1tZWRpYXRlIGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gKmZpbmQqIGl0LCBidXQgdG8gKnVuZGVyc3RhbmQqIGl0LiBPbmNlIEkmIzM5O3ZlIGxvY2F0ZWQgdGhlIGB4YV9lbnRyeWAsIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHB1cnBvc2UsIHNjb3BlLCBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybS4gSSBtaWdodCBldmVuIGNyZWF0ZSBhIG5vdGUgdG8gY2FwdHVyZSBob3cgSSBmb3VuZCBpdCwgdG8gc3RyZWFtbGluZSBmdXR1cmUgc2VhcmNoZXMuIExldCYjMzk7cyBnZXQgY3JhY2tpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhX2VudHJ5XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgveGFycmF5Lmg9MTIxNT1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2hlYWRfbG9ja2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMS0vKiBQcml2YXRlICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEyMjI6c3RhdGljIGlubGluZSB2b2lkICp4YV9lbnRyeShjb25zdCBzdHJ1Y3QgeGFycmF5ICp4YSxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTYxND1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19yZWxvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjIzLVx0XHRvZmZzZXQgPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzZVx1MDAzZSBub2RlLVx1MDAzZXNoaWZ0KSBcdTAwMjYgWEFfQ0hVTktfTUFTSztcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTYyNDpcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE2MjUtXHRcdGlmICgheGFfaXNfc2libGluZyhlbnRyeSkpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMwLVx0fVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNjMxOlx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTYzMi19XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMC1cdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMxOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCAmIzQzOyAxKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMi1cdFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzc0PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3ODktXHRcdHJldHVybiB4YXNfZmluZF9tYXJrZWQoeGFzLCBtYXgsIG1hcmspO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzkwOlx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3OTEtXHRpZiAoIWVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTg3Mz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19wcmV2KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg4Mi1cdHhhcy1cdTAwM2V4YV9vZmZzZXQtLTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTg4MzpcdHJldHVybiB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODg0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE5MDI9c3RhdGljIGlubGluZSB2b2lkICp4YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTEtXHR4YXMtXHUwMDNleGFfb2Zmc2V0JiM0MzsmIzQzOztcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTkxMjpcdHJldHVybiB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xOTEzLX1cbi0tXG5saWIveGFycmF5LmM9MjA0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqeGFzX2Rlc2NlbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxubGliL3hhcnJheS5jLTIwNy1cdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG5saWIveGFycmF5LmM6MjA4Olx0dm9pZCAqZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5saWIveGFycmF5LmMtMjA5LVxuLS1cbmxpYi94YXJyYXkuYy0yMTItXHRcdG9mZnNldCA9IHhhX3RvX3NpYmxpbmcoZW50cnkpO1xubGliL3hhcnJheS5jOjIxMzpcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5saWIveGFycmF5LmMtMjE0LVx0XHRpZiAobm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjYgeGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEyNzg9dm9pZCB4YXNfcGF1c2Uoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTEyODgtXHRcdHdoaWxlICgmIzQzOyYjNDM7b2Zmc2V0IFx1MDAzYyBYQV9DSFVOS19TSVpFKSB7XG5saWIveGFycmF5LmM6MTI4OTpcdFx0XHRpZiAoIXhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLCBub2RlLCBvZmZzZXQpKSlcbmxpYi94YXJyYXkuYy0xMjkwLVx0XHRcdFx0YnJlYWs7XG4tLVxubGliL3hhcnJheS5jPTEzMDk9dm9pZCAqX194YXNfcHJldihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTMzMC1cdGZvciAoOzspIHtcbmxpYi94YXJyYXkuYzoxMzMxOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xubGliL3hhcnJheS5jLTEzMzItXHRcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEzNDg9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTM2OS1cdGZvciAoOzspIHtcbmxpYi94YXJyYXkuYzoxMzcwOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xubGliL3hhcnJheS5jLTEzNzEtXHRcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEzOTY9dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuLS1cbmxpYi94YXJyYXkuYy0xNDI1LVxubGliL3hhcnJheS5jOjE0MjY6XHRcdGVudHJ5ID0geGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCk7XG5saWIveGFycmF5LmMtMTQyNy1cdFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XG4tLVxubGliL3hhcnJheS5jPTE0NjU9dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXG4tLVxubGliL3hhcnJheS5jLTE1MDUtXHRcdGlmICghYWR2YW5jZSkge1xubGliL3hhcnJheS5jOjE1MDY6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlLCB4YXMtXHUwMDNleGFfb2Zmc2V0KTtcbmxpYi94YXJyYXkuYy0xNTA3LVx0XHRcdGlmICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xuLS1cbmxpYi94YXJyYXkuYy0xNTI0LVxubGliL3hhcnJheS5jOjE1MjU6XHRcdGVudHJ5ID0geGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCk7XG5saWIveGFycmF5LmMtMTUyNi1cdFx0aWYgKCFlbnRyeSBcdTAwMjZcdTAwMjYgISh4YV90cmFja19mcmVlKHhhcy1cdTAwM2V4YSkgXHUwMDI2XHUwMDI2IG1hcmsgPT0gWEFfRlJFRV9NQVJLKSlcbi0tXG5saWIveGFycmF5LmM9MTkyMD1pbnQgeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTkyNi1cbmxpYi94YXJyYXkuYzoxOTI3Olx0WEFfTk9ERV9CVUdfT04oeGFzLVx1MDAzZXhhX25vZGUsIHhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLFxubGliL3hhcnJheS5jLTE5MjgtXHRcdCAgICAgICB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCkpKTtcbi0tXG5saWIveGFycmF5LmMtMTkzMy1cdFx0XHRicmVhaztcbmxpYi94YXJyYXkuYzoxOTM0Olx0XHRpZiAoIXhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgc2xvdCkpKVxubGliL3hhcnJheS5jLTE5MzUtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdC4gSGVyZSB3ZSBnbzoKCioqQW5hbHl6aW5nIGB4YV9lbnRyeWAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIGV4YW1pbmluZyB0aGlzIGB4YV9lbnRyeWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBsaWtlbHkgcmVwcmVzZW50cyBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhIHBvaW50IG9mIGFjY2Vzcywgb3IgYSBrZXkgZWxlbWVudCBpbiB3aGF0ZXZlciBwcm9jZXNzIHdlJiMzOTtyZSBhbmFseXppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZW50cywgaXRzIHB1cnBvc2UsIGFuZCBpdHMgYmVoYXZpb3IuIElzIGl0IGEgZGF0YWJhc2UgZW50cnk/IEEgY29uZmlndXJhdGlvbiBzZXR0aW5nPyBBIGhhbmRsZSB0byBhIHJlc291cmNlPyBPciBwZXJoYXBzIGEgcG9pbnRlcj8gSXRzIHR5cGUsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBuZXh0IGxldmVsIGRvd24uIExldCYjMzk7cyBzZWUgd2hhdCBmdXJ0aGVyIGluZm9ybWF0aW9uIHRoZXJlIGlzLiBNeSBhbmFseXNpcyBoaW5nZXMgb24gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyAqaW5zaWRlKiBgeGFfZW50cnlgLCBhbmQgd2hhdCBpdHMgcmVsYXRpb25zaGlwIGlzIHRvIGV2ZXJ5dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3hhcnJheS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIwOlx0XG4xMjIxOlx0LyogUHJpdmF0ZSAqL1xuMTIyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfZW50cnkoY29uc3Qgc3RydWN0IHhhcnJheSAqeGEsXG4xMjIzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcbjEyMjQ6XHR7XG4xMjI1Olx0XHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXHUwMDNlPSBYQV9DSFVOS19TSVpFKTtcbjEyMjY6XHRcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2sobm9kZS1cdTAwM2VzbG90c1tvZmZzZXRdLFxuMTIyNzpcdFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ4YS1cdTAwM2V4YV9sb2NrKSk7XG4xMjI4Olx0fVxuMTIyOTpcdFxuMTIzMDpcdC8qIFByaXZhdGUgKi9cbjEyMzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5X2xvY2tlZChjb25zdCBzdHJ1Y3QgeGFycmF5ICp4YSxcbjEyMzI6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuMTIzMzpcdHtcbjEyMzQ6XHRcdFhBX05PREVfQlVHX09OKG5vZGUsIG9mZnNldCBcdTAwM2U9IFhBX0NIVU5LX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY4MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUkNVIFVzYWdlIGFuZCBQYXRjaCBGdXp6aW5nIFJlYWRpbmVzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IGxpbmUgMTIyNiwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IGByY3VfZGVyZWZlcmVuY2VfY2hlY2tgIGlzIGJlaW5nIHVzZWQgaW4gYHhhX2VudHJ5YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiB1c2VzIGB4YXNfZm9yX2VhY2hgIHdoaWNoIGNhbGxzIGB4YV9lbnRyeWAgd2hpY2ggdGhlbiBjaGVja3MgZWl0aGVyIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAgb3IgYGxvY2tkZXBfaXNfaGVsZCgmYW1wO3hhLSZndDt4YV9sb2NrKWAuICBUaGUgcHJvYmxlbSBpcywgYHhhc19mb3JfZWFjaGAgaXMgKm5vdCogaG9sZGluZyBlaXRoZXIgb2YgdGhvc2UgbG9ja3Mgd2hlbiBpdCYjMzk7cyBjYWxsZWQhIEkmIzM5O20gc2VlaW5nIHRoYXQgYHNsb3RzX2xvY2tgIGlzIGhlbGQsIGJ1dCBub3QgdGhlIG5lZWRlZCBgeGFfbG9ja2AuICAKCldpdGggYENPTkZJR19QUk9WRV9SQ1VgIGVuYWJsZWQsIHRoaXMgaXMgZ29pbmcgdG8gdHJpZ2dlciBhIGBXQVJOSU5HOiBzdXNwaWNpb3VzIFJDVSB1c2FnZWAgb3Igc3BsYXQsIHNwZWNpZmljYWxseSBhIGByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB3aXRob3V0IGhvbGRpbmcgdGhlIGtleSFgIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBidWcgdGhhdCBzeXprYWxsZXIgb3IgbG9ja2RlcCB3aWxsIGRldGVjdCAqaW1tZWRpYXRlbHkqLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLiBZZXMsIGB4YXNfZm9yX2VhY2goJmFtcDt4YXMsIGVudHJ5LCBVTE9OR19NQVgpYCBjYWxscyBgeGFzX2ZpbmRgLCB3aGljaCAqZG9lcyogY2FsbCBgeGFfZW50cnlgLCB0cmlnZ2VyaW5nIHRoZSBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrYCBhbmQgdGhlIGxvY2tkZXAgd2FybmluZy4gQmVjYXVzZSB3ZSBhcmVuJiMzOTt0IGhvbGRpbmcgYHJjdV9yZWFkX2xvY2tgIG9yIGAmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXkueGFfbG9ja2AsIGJ1dCAqYXJlKiBob2xkaW5nIGBrdm0tJmd0O3Nsb3RzX2xvY2tgLCB3ZSYjMzk7cmUgZ29pbmcgdG8gZ2V0IHRoYXQgbG9ja2RlcCBjb21wbGFpbnQhCgpUaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyEKCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiBUcnVlIQotICAgSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhdHRyaWJ1dGUgaGFuZGxpbmcuCi0gICBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIChga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgKSwgY2hhbmdlcyBsb2NraW5nIGFzc3VtcHRpb25zLCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MsIGFuZCBleHBvc2VzIHRoZSBzeXN0ZW0gdG8gcG90ZW50aWFsIGJ1Z3MgbGlrZSB0aGUgUkNVIGxvY2tkZXAgdmlvbGF0aW9uIEkgZm91bmQsIGFuZCBwb3NzaWJseSBpbmZpbml0ZSBsb29wcyB2aWEgYHhhX2lzX3JldHJ5YCwgYW5kIGFsc28gcGVyZm9ybWFuY2UgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIG1heGltaXplIGZ1enppbmcgZWZmaWNpZW5jeS4gIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQgYXJlIHRoZSBrZXkgZW50cnlwb2ludHMgaGVyZToKLSAgIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AKLSAgIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYAotICAgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgCgpga3ZtX2NyZWF0ZV92bWAgaXMgYSBob3QgcGF0aCBidXQgdG9vIHViaXF1aXRvdXM7IGl0JiMzOTtzIGNhbGxlZCBpbiBuZWFybHkgZXZlcnkgS1ZNIHRlc3QuICBIb3dldmVyLCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AsIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIGFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIG1lbW9yeSBhdHRyaWJ1dGUgZmVhdHVyZS4KCkkgZG8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIHRob3VnaCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGlzIGBzdGF0aWNgLCB0aGF0IGl0IHdpbGwgc3RpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgdm1saW51eC4gIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJ1bGVzLiBBaCwgeWVzLCBzdGF0aWMgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKmRvKiBoYXZlIHN5bWJvbHMuIEkgY2FuIGxpc3QgYm90aCB0aGF0IGFuZCBpdHMgY2FsbGVycy4KCkNoZWNraW5nIGNhbGxlcnMsIEkgc2VlIHRoYXQgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGNhbGxzIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AuICBBbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgIGlzIHRoZSBkaXJlY3QgaW9jdGwgZW50cnlwb2ludCB3aGljaCBjYWxscyBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AuICBTbywgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgIGFyZSBteSBgRm9jdXNTeW1ib2xzYC4KCk5vdyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcmVsZXZhbnQgY29kZSBpcyBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFNvLCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWdzIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSXQmIzM5O3Mgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzOgotICAgYEtWTWAgKHRoZSBvYnZpb3VzIGZpcnN0IG9uZSEpCgpDaGVja2luZyBpbiBgdmlydC9rdm0vS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgYSBib29sLgoKTm93LCBJJiMzOTtsbCBjaGVjayBhbGwgYXJjaGl0ZWN0dXJlcyB0byBzZWUgd2hhdCBzZWxlY3RzIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIEkgZm91bmQ6Ci0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWA6IGRlcGVuZHMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLgotICAgYEtWTV9JTlRFTF9URFhgOiBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE0MQoJCQkJCQkJb3V0cHV0OiAyNzEKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGUgdGFzayBvZiBmaWd1cmluZyBvdXQgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCB3b3JrIHdpdGggdGhpcyBLVk0gZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSAoYW1kNjQsIGFzIHRoZSB1c2VyIHNwZWNpZmllZCkuIFRoZSBrZXkgaGVyZSBpcyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludC4KCk15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzaG93cyB0aGF0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCAqb25seSogd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIFRvIGVuYWJsZSBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIEkgbmVlZCB0byBlbmFibGU6IGBLVk1gLCBgS1ZNX0lOVEVMYCAqb3IqIGBLVk1fQU1EYCAod2hpY2ggaW1wbGllcyBgS1ZNX1g4NmApLCBgRVhQRVJUYCwgYW5kIG9mIGNvdXJzZSwgYEtWTV9TV19QUk9URUNURURfVk1gIGl0c2VsZiwgYW5kIGFsc28gYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4KCkkgdGhlbiB3ZW50IHRocm91Z2ggYSB0aG9yb3VnaCBjaGVjaywgdmVyaWZ5aW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggY29uZmlnLiBJIHJlY29uZmlybWVkOiBgVklSVFVBTElaQVRJT049eWAsIGBLVk09eWAgb3IgYG1gLCBgS1ZNX0lOVEVMPXlgIG9yIGBtYCAob3IgYEtWTV9BTURgKSwgYEVYUEVSVD15YCwgYEtWTV9TV19QUk9URUNURURfVk09eWAsIGFuZCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVM9eWAuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCBgS1ZNX0FNRF9TRVY9eWAgYXMgYW4gYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uLCBqdXN0IGluIGNhc2UuCgpJIHJldmlzaXRlZCB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODMtOTUsIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgSSBoYWRuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBtYWRlIHN1cmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgZGVwZW5kZW5jeSBgRVhQRVJUYCBpcyByZXF1aXJlZC4gSSByZS1yZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGFib3V0IGlkZW50aWZ5aW5nIEVuYWJsZUNvbmZpZ3MgdG8gbWFrZSBzdXJlIEkgZm9sbG93ZWQgdGhlIGd1aWRlbGluZXM6IGluc3BlY3RpbmcgS2NvbmZpZyBmaWxlcywgY2hlY2tpbmcgJiMzOTtkZXBlbmRzIG9uJiMzOTsgbGluZXMsIGFuZCBzdHJpcHBpbmcgJiMzOTtDT05GSUdfJiMzOTsuCgpUaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IG9mIEVuYWJsZUNvbmZpZ3MgSSBuZWVkIHRvIHVzZSBpczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgYW5kIGBFWFBFUlRgLiBJIGJlbGlldmUgSSBoYXZlIGlkZW50aWZpZWQgYWxsIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBGb2N1c1N5bWJvbHM6IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYCwgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgY2FuIHN1bW1hcml6ZSB0aGUgY3J1Y2lhbCBwb2ludDogdGhlIHBhdGNoIHBsYWNlcyBhIGJvdW5kIG9uIG1lbW9yeSBhdHRyaWJ1dGUgZW50cmllcyBhbmQgaW50cm9kdWNlcyBhIGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB3aGljaCBoYXMgaXNzdWVzIGJlY2F1c2UgaXQgaXRlcmF0ZXMgdGhyb3VnaCBhbiB4YXJyYXkgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgbG9ja3MuIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBpb2N0bCh2bV9mZCwgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCBhbmQgaXQgY291bGQgbGVhZCB0byBsb2NrZGVwIHdhcm5pbmdzLCBsb2NrdXBzLCBhbmQgdHJhdmVyc2FsIHByb2JsZW1zLiBUaGlzIGNvZGUgaXMgcmVsZXZhbnQgZm9yIHZpcnR1YWxpemF0aW9uIGZ1enppbmcgb24geDg2XzY0LgoKSSBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHRoZSByZXN1bHRzLiBJIGFtIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOGNkYTgyY2E4OTIzMDliOTk5YzdhNjRhNDY5NzRmYzQ0YjU5MWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtNTczLDYgJiM0Mzs1NzMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLgogICovCiAjZGVmaW5lIEtWTV9NRU1fTUFYX05SX1BBR0VTICgoMVVMICZsdDsmbHQ7IDMxKSAtIDEpCiYjNDM7LyoKJiM0MzsgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbgomIzQzOyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LAomIzQzOyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2YKJiM0MzsgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUwkoMVVMICZsdDsmbHQ7IDI1KQogCiAvKgogICogU2luY2UgYXQgaWRsZSBlYWNoIG1lbXNsb3QgYmVsb25ncyB0byB0d28gbWVtc2xvdCBzZXRzIGl0IGhhcyB0byBjb250YWluCkBAIC04NzcsNiAmIzQzOzg4NCw3IEBAIHN0cnVjdCBrdm0gewogI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUwogCS8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovCiAJc3RydWN0IHhhcnJheSBtZW1fYXR0cl9hcnJheTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtZW1fYXR0cl9nZm5fY291bnQ7CiAjZW5kaWYKIAljaGFyIHN0YXRzX2lkW0tWTV9TVEFUU19OQU1FX1NJWkVdOwogfTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDEwOGQ0MmM1YzFkNmEuLjI1YzFmZjBjMmE5M2UgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTEyNyw3ICYjNDM7MTEyNyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKQogCXJjdXdhaXRfaW5pdCgmYW1wO2t2bS0mZ3Q7bW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpOwogCXhhX2luaXQoJmFtcDtrdm0tJmd0O3ZjcHVfYXJyYXkpOwogI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUwotCXhhX2luaXQoJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5KTsKJiM0MzsJeGFfaW5pdF9mbGFncygmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpOwomIzQzOwlrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudCA9IDA7CiAjZW5kaWYKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7a3ZtLSZndDtncGNfbGlzdCk7CkBAIC0yNTQ0LDYgJiM0MzsyNTQ1LDMzIEBAIHN0YXRpYyBib29sIGt2bV9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR0ZOcyB3aXRoIGEgbWF0ZXJpYWxpemVkIGVudHJ5IGluIG1lbV9hdHRyX2FycmF5LgomIzQzOyAqIFNlcmlhbGl6YXRpb24gYWdhaW5zdCBtb2RpZmljYXRpb25zIGlzIHByb3ZpZGVkIGJ5IGt2bS0mZ3Q7c2xvdHNfbG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlYQV9TVEFURSh4YXMsICZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSwgMCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwomIzQzOwl2b2lkICplbnRyeTsKJiM0MzsKJiM0MzsJeGFzX2Zvcl9lYWNoKCZhbXA7eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7CiYjNDM7CQlpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7CiYjNDM7CQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChlbnRyeSkKJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKJiM0MzsJCQl4YXNfcGF1c2UoJmFtcDt4YXMpOwomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovCiBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKQpAQCAtMjU2Nyw2ICYjNDM7MjU5NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJfTsKIAl1bnNpZ25lZCBsb25nIGk7CiAJdm9pZCAqZW50cnk7CiYjNDM7CWJvb2wgbXV0YXRlZCA9IGZhbHNlOwogCWludCByID0gMDsKIAogCWVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDsKQEAgLTI1NzksNiAmIzQzOzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAlpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiYjNDM7CS8qCiYjNDM7CSAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uCiYjNDM7CSAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy4KJiM0MzsJICovCiYjNDM7CWlmIChhdHRyaWJ1dGVzICZhbXA7JmFtcDsKJiM0MzsJICAgIGt2bS0mZ3Q7bWVtX2F0dHJfZ2ZuX2NvdW50ICYjNDM7IChlbmQgLSBzdGFydCkgJmd0OyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHsKJiM0MzsJCXIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTQomIzQzOwkgKiBjb3VudGVyIG11c3QgYmUgcmVzeW5jaHJvbml6ZWQgb24gdGhlIHdheSBvdXQuICBFYXJseS1vdXRzIGFib3ZlCiYjNDM7CSAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuCiYjNDM7CSAqLwomIzQzOwltdXRhdGVkID0gdHJ1ZTsKJiM0MzsKIAkvKgogCSAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlcwogCSAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy4KQEAgLTI2MDMsNiAmIzQzOzI2NDksMTUgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAlrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sICZhbXA7cG9zdF9zZXRfcmFuZ2UpOwogCiBvdXRfdW5sb2NrOgomIzQzOwkvKgomIzQzOwkgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlCiYjNDM7CSAqIGNoYW5nZWQ6IG9uIEVOT01FTSBwYXJ0d2F5IHRocm91Z2ggdGhlIHJlc2VydmUgbG9vcCwgcGFydGlhbGx5CiYjNDM7CSAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWwKJiM0MzsJICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGUKJiM0MzsJICogd2FsayBzbyBpZGVtcG90ZW50IHJlcXVlc3RzIHN0YXkgTygxKS4KJiM0MzsJICovCiYjNDM7CWlmIChtdXRhdGVkKQomIzQzOwkJa3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnQgPSBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIG1ldGljdWxvdXNseS4KCkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgaXMganVzdCAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIE5vdCBtdWNoIHRoZXJlLiBUaGUgZGlmZiBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbmQgdXRpbGl6aW5nIGEgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2l0aGluIEtWTSwgcmVsYXRlZCB0byBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzIChgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCkuIFRoaXMgc2VlbXMgbGlrZSBhIG5ldyBmZWF0dXJlLCBhIG1lY2hhbmlzbSB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IFBoeXNpY2FsIEZyYW1lIE51bWJlcnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlc2UgY2hhbmdlczoKCiogICBBIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0IGlzIGRlZmluZWQsIGxpa2VseSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZS4KKiAgIGB4YV9pbml0X2ZsYWdzYCBpcyB1c2VkLCB3aXRoIGBYQV9GTEFHU19BQ0NPVU5UYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCBzdWdnZXN0cyB0aGF0IGEgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIHVzZWQgdG8gbWFuYWdlIHRoZXNlIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgdGhlIGBYQV9GTEFHU19BQ0NPVU5UYCBmbGFnIG1lYW5zIGl0IHdpbGwga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMuIFRoaXMgaXMgd2hlcmUgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2lsbCBiZSB1cGRhdGVkLCBwcmVzdW1hYmx5LCBhZnRlciBlYWNoIG1lbW9yeSBhdHRyaWJ1dGUgaXMgc2V0LgoqICAgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBpcyBhZGRlZC4gVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBYQXJyYXkgdG8gZ2V0IHRoZSBjdXJyZW50IG51bWJlciBvZiBtZW1vcnkgYXR0cmlidXRlIGVudHJpZXMuIFRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBwZXJmb3JtaW5nIGEgY291bnQgb2YgdGhlIGVudHJpZXMgaW4gdGhlIFhBcnJheSBhbmQgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGBtZW1fYXR0cl9nZm5fY291bnRgIHZhcmlhYmxlLgoKVGhlIG1haW4gbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGxpbWl0IGNoZWNrIGhhcHBlbnMuIElmIHRoZSBuZXcgYXR0cmlidXRlcywgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIGNvdW50LCBleGNlZWQgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AsIGl0IHJldHVybnMgYC1FTk9TUENgLiBUaGlzIGlzIHRvIGxpbWl0IHRoZSBwb3NzaWJsZSBudW1iZXIgb2YgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgc2VlIHRoZSBjb2RlIGlzIGRvaW5nIGEgY2hlY2sgdG8gc2VlIGlmIHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgd2lsbCBleGNlZWQgdGhlIGxpbWl0LCBhbmQgaWYgc28sIGl0IHJldHVybnMgYW4gZXJyb3IuCgpUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIHRoZSBlbnRyaWVzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdG8gZW5zdXJlIGFuIHVwcGVyIGxpbWl0IGlzbiYjMzk7dCBleGNlZWRlZCBpcyBpbnRlcmVzdGluZy4KCk5vdywgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWVyaXRzIGEgZnV6emluZyBzZXNzaW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgbGltaXQgY2hlY2ssIGl0JiMzOTtzIGVhc3kgdG8gcmVhY2ggdGhlIGxpbWl0LCBhbmQgaXQgdXNlcyBhbiBYQXJyYXkuCgpNeSBpbnR1aXRpb24gc2F5czogKipZZXMsIHRoaXMgd2FycmFudHMgZnV6emluZy4qKiBUaGVyZSBpcyBsaWtlbHkgYSBidWcgaW4gdGhlIGNvZGUgdGhhdCBJIGNhbiBmaW5kIHdpdGggS01TQU4uIFNwZWNpZmljYWxseSwgWEFycmF5cyBjYW4gaGF2ZSBpc3N1ZXMgd2l0aCBjb25jdXJyZW5jeSBvciBib3VuZGFyeSBjb25kaXRpb25zIHdoZW4gbW9kaWZpZWQuIFRoaXMgY2hlY2sgc2VlbXMgbGlrZSBhIGdyZWF0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIGFuIGVudHJ5LiBJdCBpcyBwb3NzaWJsZSB0aGUgY2hlY2sgaXMgbm90IGFjY3VyYXRlLCBhbmQgbWF5IG5vdCBhY3R1YWxseSByZWplY3QgZXZlcnkgdmFsaWQgZW50cnkuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGlmIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGlzIHJlYWNoZWQsIGZvciBleGFtcGxlLiBUaGUgY2hlY2sgY291bGQgYmUgYnlwYXNzZWQgaW4gc29tZSB3YXkuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXM6CgoxLiAgKipFeGNlZWQgdGhlIExpbWl0OioqIFRoZSBtb3N0IG9idmlvdXMgaXMgdG8gdHJ5IHRvIGV4Y2VlZCB0aGUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQgaW4gdmFyaW91cyB3YXlzLiBEb2VzIHRoZSBgLUVOT1NQQ2AgZXJyb3IgaGFuZGxlIGNvcnJlY3RseT8KMi4gICoqQ29uY3VycmVuY3k6KiogRXhwbG9pdCBjb25jdXJyZW50IGFjY2VzcyB0byBga3ZtLSZndDttZW1fYXR0cl9hcnJheWAgd2l0aCBtdWx0aXBsZSB0aHJlYWRzIG9yIFZNcy4gUmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgd2hlbiB3b3JraW5nIHdpdGggYW4gWEFycmF5LgozLiAgKipCb3VuZGFyeSBDb25kaXRpb25zOioqIENoZWNrIHRoZSBiZWhhdmlvcnMgb24gdGhlIGV4YWN0IGVkZ2VzIG9mIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGFuZCB3aGVuIHNldHRpbmcgYXR0cmlidXRlcyB0byB0aGUgc2FtZSBHRk4uCjQuICAqKkVycm9yIEhhbmRsaW5nOioqIFZlcmlmeSB0aGF0IGFsbCBlcnJvciBwYXRocyBhcmUgaGFuZGxlZCBzYWZlbHkuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IGF0dHJpYnV0ZSBsb2dpYy4gSSB3aWxsIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIG90aGVyIHVzYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yNTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1NzUtLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyNTc2OnN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1NzctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2MDItXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI2MDM6XHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xudmlydC9rdm0va3ZtX21haW4uYy0yNjA0LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjY2NT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY4OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjY5MDpcdHJldHVybiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgYXR0cnMtXHUwMDNlYXR0cmlidXRlcyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgQ29yZTogRXhhbWluaW5nIGEgU3BlY2lmaWMgU2VjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIEtWTSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgY2h1bmsgd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCDigJMgbGluZXMgMjU3MCB0byAyNzAwLiBUaGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBjcml0aWNhbCBmdW5jdGlvbiBvciBtb2R1bGUsIGdpdmVuIHRoZSBsZW5ndGggYW5kIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGBrdm1fbWFpbi5jYCBmaWxlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZWl0aGVyIFZNIHNldHVwLCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgZ3Vlc3QtcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50LCBvciBpbnRlcnJ1cHQgaGFuZGxpbmcuIFBlcmhhcHMgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGEgY3J1Y2lhbCBldmVudCBsb29wIGNvbXBvbmVudCwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBvciBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSB3aXRoaW4gdGhhdCByYW5nZSwgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IG9mIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgcHJvZHVjZXMgaW4gdGhlIHdpZGVyIEtWTSBlY29zeXN0ZW0uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgbWFjaGluZSBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdHJldHVybiBjb3VudDtcbjI1NzM6XHR9XG4yNTc0Olx0XG4yNTc1Olx0LyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuMjU3NjpcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNTc3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbjI1Nzg6XHR7XG4yNTc5Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xuMjU4MDpcdFx0XHQuc3RhcnQgPSBzdGFydCxcbjI1ODE6XHRcdFx0LmVuZCA9IGVuZCxcbjI1ODI6XHRcdFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcbjI1ODM6XHRcdFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcbjI1ODQ6XHRcdFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQsXG4yNTg1Olx0XHRcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxuMjU4NjpcdFx0XHQubWF5X2Jsb2NrID0gdHJ1ZSxcbjI1ODc6XHRcdH07XG4yNTg4Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcbjI1ODk6XHRcdFx0LnN0YXJ0ID0gc3RhcnQsXG4yNTkwOlx0XHRcdC5lbmQgPSBlbmQsXG4yNTkxOlx0XHRcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXG4yNTkyOlx0XHRcdC5oYW5kbGVyID0ga3ZtX2FyY2hfcG9zdF9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXG4yNTkzOlx0XHRcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcbjI1OTQ6XHRcdFx0Lm1heV9ibG9jayA9IHRydWUsXG4yNTk1Olx0XHR9O1xuMjU5NjpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMjU5NzpcdFx0dm9pZCAqZW50cnk7XG4yNTk4Olx0XHRib29sIG11dGF0ZWQgPSBmYWxzZTtcbjI1OTk6XHRcdGludCByID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcbjI2MDI6XHRcbjI2MDM6XHRcdHRyYWNlX2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RhcnQsIGVuZCwgYXR0cmlidXRlcyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2MDY6XHRcbjI2MDc6XHRcdC8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIGVudGlyZSByYW5nZSBoYXMgdGhlIGRlc2lyZWQgYXR0cmlidXRlcy4gKi9cbjI2MDg6XHRcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuMjYwOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yNjEwOlx0XG4yNjExOlx0XHQvKlxuMjYxMjpcdFx0ICogQm91bmQgdGhlIG51bWJlciBvZiBtYXRlcmlhbGl6ZWQgR0ZOcyBwZXIgVk0uICBTZWUgdGhlIGNvbW1lbnQgb25cbjI2MTM6XHRcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbjI2MTQ6XHRcdCAqL1xuMjYxNTpcdFx0aWYgKGF0dHJpYnV0ZXMgXHUwMDI2XHUwMDI2XG4yNjE2Olx0XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbjI2MTc6XHRcdFx0ciA9IC1FTk9TUEM7XG4yNjE4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MTk6XHRcdH1cbjI2MjA6XHRcbjI2MjE6XHRcdC8qXG4yNjIyOlx0XHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbjI2MjM6XHRcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbjI2MjQ6XHRcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4yNjI1Olx0XHQgKi9cbjI2MjY6XHRcdG11dGF0ZWQgPSB0cnVlO1xuMjYyNzpcdFxuMjYyODpcdFx0LypcbjI2Mjk6XHRcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuMjYzMDpcdFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuMjYzMTpcdFx0ICovXG4yNjMyOlx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpJiM0MzsmIzQzOykge1xuMjYzMzpcdFx0XHRyID0geGFfcmVzZXJ2ZShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yNjM0Olx0XHRcdGlmIChyKVxuMjYzNTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MzY6XHRcbjI2Mzc6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjM4Olx0XHR9XG4yNjM5Olx0XG4yNjQwOlx0XHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xuMjY0MTpcdFxuMjY0MjpcdFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbjI2NDM6XHRcdFx0ciA9IHhhX2Vycih4YV9zdG9yZShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIGVudHJ5LFxuMjY0NDpcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUxfQUNDT1VOVCkpO1xuMjY0NTpcdFx0XHRLVk1fQlVHX09OKHIsIGt2bSk7XG4yNjQ2Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjY0NzpcdFx0fVxuMjY0ODpcdFxuMjY0OTpcdFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4yNjUwOlx0XG4yNjUxOlx0b3V0X3VubG9jazpcbjI2NTI6XHRcdC8qXG4yNjUzOlx0XHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4yNjU0Olx0XHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuMjY1NTpcdFx0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuMjY1NjpcdFx0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbjI2NTc6XHRcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4yNjU4Olx0XHQgKi9cbjI2NTk6XHRcdGlmIChtdXRhdGVkKVxuMjY2MDpcdFx0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbjI2NjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4yNjYyOlx0XG4yNjYzOlx0XHRyZXR1cm4gcjtcbjI2NjQ6XHR9XG4yNjY1Olx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbjI2NjY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXG4yNjY3Olx0e1xuMjY2ODpcdFx0Z2ZuX3Qgc3RhcnQsIGVuZDtcbjI2Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBwaWVjZSBieSBwaWVjZS4gRmlyc3QsIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGFkZGVkIGEgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IEZyYW1lIE51bWJlcnMpIHRoYXQgY2FuIGhhdmUgbWF0ZXJpYWxpemVkIGVudHJpZXMgaW4gdGhlIGBtZW1fYXR0cl9hcnJheWAgcGVyIFZNLiBUaGUgdmFsdWUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgaXMgc2V0IHRvIGAxVUwgJmx0OyZsdDsgMjVgLCB3aGljaCB0cmFuc2xhdGVzIHRvLCB3aGF0LCAzMyw1NTQsNDMyIGVudHJpZXM/IFRoYXQgc2VlbXMgcmVhc29uYWJsZSBmb3IgYSBoYXJkZW5pbmcgbWVhc3VyZS4KCk5leHQsIGEgbmV3IGZpZWxkLCBgbWVtX2F0dHJfZ2ZuX2NvdW50YCAoYW4gYHVuc2lnbmVkIGxvbmdgKSwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBzdHJ1Y3Qga3ZtYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHdpbGwgdHJhY2sgdGhlIG51bWJlciBvZiBhY3RpdmUgZW50cmllcy4gVGhpcyBpcyBnb29kOyB3ZSBuZWVkIHRvIHRyYWNrIHRoaXMgc29tZWhvdyBpZiB3ZSB3YW50IHRvIGVuZm9yY2UgdGhlIGxpbWl0LgoKVGhlIGBrdm1fY3JlYXRlX3ZtYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgdGhlIGBtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGFsc28gc2V0cyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uIE9rYXksIHVzaW5nIGBYQV9GTEFHU19BQ0NPVU5UYCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIG5vdyBiZWluZyB1c2VkIHRvIHRyYWNrIGhvdyBtYW55IGVudHJpZXMgZXhpc3QgaW4gdGhlIGFycmF5IChwcm9iYWJseSBmb3IgdGhlIHB1cnBvc2Ugb2YgYXZvaWRpbmcgYW55IHNvcnQgb2Ygb3V0LW9mLW1lbW9yeSBlcnJvcikuIFRoaXMgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyB3ZSBoYXZlIGEga25vd24gc3RhcnRpbmcgcG9pbnQuCgpUaGUgbmV3IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24gbG9va3MgaW50ZXJlc3RpbmcuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHhhcnJheSB1c2luZyBgeGFzX2Zvcl9lYWNoYC4gSXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHJldHJpZXMgd2l0aCBgeGFzX3BhdXNlYCBhbmQgYXBwcm9wcmlhdGVseSBza2lwcyB0aG9zZSBlbnRyaWVzLiBJdCBjb3VudHMgdGhlIG51bWJlciBvZiBub24tTlVMTCBlbnRyaWVzIGFuZCBwYXVzZXMgaWYgbmVjZXNzYXJ5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHdheSB0byBnZXQgYW4gYWNjdXJhdGUgY291bnQgb2YgdGhlIHVzZWQgZW50cmllcy4KCkZpbmFsbHksIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgd2Ugc2VlIHRoZSBlbmZvcmNlbWVudCBvZiB0aGUgbGltaXQuIFRoZSBwYXRjaCBjaGVja3MgaWYgdGhlIGFkZGl0aW9uIG9mIG5ldyBtZW1vcnkgYXR0cmlidXRlcyB3b3VsZCBleGNlZWQgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBJZiBzbywgaXQgcmV0dXJucyBgLUVOT1NQQ2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlIGFycmF5IGl0IHJlY2FsY3VsYXRlcyB0aGUgY291bnQgdXNpbmcgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gTWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIHBhdGNoIHNlbmQgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZT8gTm8sIHRoYXQmIzM5O3MgZ29vZC4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXM/IFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGlzLiBMZXQmIzM5O3Mgc2VlOiBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGt2bV9jcmVhdGVfdm1gLiBHcmVhdC4gVGhlIGBrdm1gIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgZmllbGRzIGluIHRoZSBzdHJ1Y3QgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBob3cgYGt2bWAgaXMgYWxsb2NhdGVkIGluIGBrdm1fY3JlYXRlX3ZtYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcywgYnV0IGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHNhZmUgaGVyZS4KCkkgYmVsaWV2ZSB0aGlzIHBhdGNoIGlzIHdlbGwtd3JpdHRlbiBhbmQgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NyZWF0ZV92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz05OTA9c3RhdGljIHZvaWQga3ZtX2Rlc3Ryb3lfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMDA3LVxudmlydC9rdm0va3ZtX21haW4uYzoxMDA4OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMDA5LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDc9c3RhdGljIHZvaWQga3ZtX2Rpc2FibGVfdmlydHVhbGl6YXRpb24odm9pZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMDk6c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMTAte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE0My1cdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE0NDpcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNDUtXHQgKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEyMDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEyMDg6XHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTIwOS1cdGlmIChyKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTU2ND1zdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1Nzc6XHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzgtXHRpZiAoSVNfRVJSKGt2bSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS1ZNIFZNIENyZWF0aW9uIEFsbG9jYXRpb24gSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBjb3JlIHN0YWdlIG9mIFZNIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgaG93IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb2J2aW91cyByZWQgZmxhZ3PigJRtZW1vcnkgbGVha3MsIGluZWZmaWNpZW50IGFsbG9jYXRpb24gcGF0dGVybnMsIG9yIHBvdGVudGlhbGx5IGV4Y2Vzc2l2ZSByZXNvdXJjZSBjb25zdW1wdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW5zdGFiaWxpdHkgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGFjdHVhbCBjYWxsIGl0c2VsZiwgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExMDpcdHtcbjExMTE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTEyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMTM6XHRcdGludCByLCBpLCBqO1xuMTExNDpcdFxuMTExNTpcdFx0aWYgKCFrdm0pXG4xMTE2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTExNzpcdFxuMTExODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMTk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMjA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTIxOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTIyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMjM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMjQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTEyNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMjY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTEyNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTI4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMjk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTMwOlx0XHR4YV9pbml0X2ZsYWdzKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgWEFfRkxBR1NfQUNDT1VOVCk7XG4xMTMxOlx0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcbjExMzI6XHQjZW5kaWZcbjExMzM6XHRcbjExMzQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODYKCQkJCQkJCW91dHB1dDogMjE4CgkJCQkJCQl0aG91Z2h0czogNDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE1lbW9yeSBBdHRyaWJ1dGUgTGltaXQgZm9yIEtWTSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBmaW5kaW5nLgoKYGt2bV9hcmNoX2FsbG9jX3ZtKClgIGNsZWFybHkgemVyb2VzIHRoZSBgc3RydWN0IGt2bWAsIGFuZCBzcGVjaWZpY2FsbHkgbGluZSAxMTMxIHplcm9lcyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMb29raW5nIGF0IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHRoZSBgWEFfU1RBVEVgIG1hY3JvIGluaXRpYWxpemVzIHRoZSBgeGFzYCBzdHJ1Y3R1cmUsIGFuZCBgY291bnRgIGlzIHNldCB0byAwLiBTaW1pbGFybHksIGBtdXRhdGVkYCBpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuIFNvLCBiYXNlZCBvbiB0aGUgY29kZSBpdHNlbGYsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBpbmZvIGxlYWtzLgoKVGhlIHBvaW50IG9mIHRoaXMgcGF0Y2ggaXMgYSByZXNvdXJjZSBsaW1pdCBhbmQgaGFyZGVuaW5nIG1lYXN1cmUsIGRlc2lnbmVkIHRvIHN0b3AgdGhlIHVuYm91bmRlZCBncm93dGggb2YgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMgd2hlbiBhIHVzZXIgY2FsbHMgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLiBBbnkgYnVncyBoZXJlIGFyZSBnb2luZyB0byBiZSBsb2dpYy1iYXNlZCwgcmVzb3VyY2UtbWFuYWdlbWVudCBpc3N1ZXMsIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMgKHdoaWNoIGBsb2NrZGVwYCBzaG91bGQgY2F0Y2gpLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gKHdoaWNoIGBLQVNBTmAgaXMgZGVzaWduZWQgdG8gZGV0ZWN0KS4gQ3J1Y2lhbGx5LCBub25lIG9mIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGludm9sdmUgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHRlc3Rpbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBpc3N1ZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gS0FTQU4gaXMgdGhlcmUgdG8gaGFuZGxlIE9PQiwgVUFGLCBkb3VibGUtZnJlZXMsIGV0Yy4gVGhpcyBwYXRjaCBhZGRzIGFuIGVudHJ5IGNvdW50ZXIgYW5kIGEgbGltaXQgY2hlY2sgZm9yIHRoZSBLVk0gbWVtb3J5IGF0dHJpYnV0ZXMgeGFycmF5IChgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCkuIFRoZSBgbWVtX2F0dHJfZ2ZuX2NvdW50YCBjb3VudGVyIGlzIGludHJvZHVjZWQsIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBoZWxwZXIgZnVuY3Rpb24gYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKClgIHdhbGtzIHRoZSB4YXJyYXkgYW5kIGNvdW50cyB0aGUgZW50cmllcy4gQWxsIHRoZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBubyB1c2VyLWNvcHlpbmcsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCByZWFkcy4gWWVwLCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlc291cmNlIGxpbWl0IChLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIGFuZCB0cmFja2luZyAobWVtX2F0dHJfZ2ZuX2NvdW50KSBmb3IgbWF0ZXJpYWxpemVkIGVudHJpZXMgaW4gS1ZNJiMzOTtzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxuXG5BbGwgYWRkZWQgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoaW5jbHVkaW5nIHRoZSBjb3VudGVyIGluIHN0cnVjdCBrdm0sIGxvY2FsIHN0YXRlIGluIGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMsIGFuZCB0aGUgaXRlcmF0b3IgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYnVmZmVycyBhcmUgZXhwb3NlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCBwZXJ0YWluIHRvIGFjY291bnRpbmcgbG9naWMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIGxvY2tpbmcvY29uY3VycmVuY3kgKGhhbmRsZWQgYnkgc3RhbmRhcmQgdGVzdHMgYW5kIExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ1LjQ1MjE1ODI2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMjM1NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVzb3VyY2UgbGltaXQgKEtWTV9NRU1fQVRUUl9NQVhfR0ZOUykgYW5kIHRyYWNraW5nIChtZW1fYXR0cl9nZm5fY291bnQpIGZvciBtYXRlcmlhbGl6ZWQgZW50cmllcyBpbiBLVk0ncyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cXG5cXG5BbGwgYWRkZWQgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoaW5jbHVkaW5nIHRoZSBjb3VudGVyIGluIHN0cnVjdCBrdm0sIGxvY2FsIHN0YXRlIGluIGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMsIGFuZCB0aGUgaXRlcmF0b3IgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYnVmZmVycyBhcmUgZXhwb3NlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCBwZXJ0YWluIHRvIGFjY291bnRpbmcgbG9naWMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIGxvY2tpbmcvY29uY3VycmVuY3kgKGhhbmRsZWQgYnkgc3RhbmRhcmQgdGVzdHMgYW5kIExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gbWVtb3J5IGF0dHJpYnV0ZSBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMsIHRyYWNraW5nIG1hdGVyaWFsaXplZCBHRk4gZW50cmllcyBpbiBtZW1fYXR0cl9hcnJheSwgYW5kIGFkZGluZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHRvIHJlY2FsY3VsYXRlIHRoZSBwb3B1bGF0aW9uIHVzaW5nIHhhc19mb3JfZWFjaCgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gcmVhY2hhYmxlIHVzZXItc3BhY2UgaW9jdGwgcGF0aHMgKEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpLiBGdXJ0aGVybW9yZSwgaXRlcmF0aW5nIHRoZSB4YXJyYXkgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0NS40NTIxNjQzOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODcwMjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiBUaGlzIG51bWJlciBtdXN0IGJlIGRldGVybWluZWQgbm90IHRvIGV4Y2VlZCBzdWNoIGxpbWl0cy5cXG4gICovXFxuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXFx1MDAzY1xcdTAwM2MgMzEpIC0gMSlcXG4rLypcXG4rICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW5cXG4rICogbWVtX2F0dHJfYXJyYXkgcGVyIFZNICh+MzAwIE1pQiBvZiB4YV9ub2RlcyBhdCAyXjI1KS4gIFdpdGhvdXQgaXQsXFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcXG4rICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuXFxuKyAqL1xcbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1xcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMjUpXFxuIFxcbiAvKlxcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cXG5AQCAtODc3LDYgKzg4NCw3IEBAIHN0cnVjdCBrdm0ge1xcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIFxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXFxuIFxcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50O1xcbiAjZW5kaWZcXG4gXFx0Y2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTExMjcsNyArMTEyNyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbiBcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbiBcXHR4YV9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXZjcHVfYXJyYXkpO1xcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLVxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbitcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4rXFx0a3ZtLVxcdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgPSAwO1xcbiAjZW5kaWZcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG5AQCAtMjU0NCw2ICsyNTQ1LDMzIEBAIHN0YXRpYyBib29sIGt2bV9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS5cXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVxcdTAwM2VzbG90c19sb2NrLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4rXFx0dm9pZCAqZW50cnk7XFxuK1xcbitcXHR4YXNfZm9yX2VhY2goXFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xcbitcXHRcXHRpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7XFxuK1xcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVudHJ5KVxcbitcXHRcXHRcXHRjb3VudCsrO1xcbitcXG4rXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuK1xcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4rXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbiBcXHR9O1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcdHZvaWQgKmVudHJ5O1xcbitcXHRib29sIG11dGF0ZWQgPSBmYWxzZTtcXG4gXFx0aW50IHIgPSAwO1xcbiBcXG4gXFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xcbkBAIC0yNTc5LDYgKzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4gXFx0aWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXFxuK1xcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cXG4rXFx0ICovXFxuK1xcdGlmIChhdHRyaWJ1dGVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBrdm0tXFx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCArIChlbmQgLSBzdGFydCkgXFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcXG4rXFx0XFx0ciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSByZXF1ZXN0IG11dGF0ZXMgdGhlIGFycmF5LCBzbyB0aGUgcGVyLVZNXFxuK1xcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcXG4rXFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4rXFx0ICovXFxuK1xcdG11dGF0ZWQgPSB0cnVlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXFxuIFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG5AQCAtMjYwMyw2ICsyNjQ5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnBvc3Rfc2V0X3JhbmdlKTtcXG4gXFxuIG91dF91bmxvY2s6XFxuK1xcdC8qXFxuK1xcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcXG4rXFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4rXFx0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxcbitcXHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxcbitcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbitcXHQgKi9cXG4rXFx0aWYgKG11dGF0ZWQpXFxuK1xcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ2LjAwMTU4MDQzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ2MzgzNjkwNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCIsXG4gICAgXCJLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNcIixcbiAgICBcImt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNcIixcbiAgICBcImt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gbWVtb3J5IGF0dHJpYnV0ZSBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMsIHRyYWNraW5nIG1hdGVyaWFsaXplZCBHRk4gZW50cmllcyBpbiBtZW1fYXR0cl9hcnJheSwgYW5kIGFkZGluZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHRvIHJlY2FsY3VsYXRlIHRoZSBwb3B1bGF0aW9uIHVzaW5nIHhhc19mb3JfZWFjaCgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gcmVhY2hhYmxlIHVzZXItc3BhY2UgaW9jdGwgcGF0aHMgKEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpLiBGdXJ0aGVybW9yZSwgaXRlcmF0aW5nIHRoZSB4YXJyYXkgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLlxuICAqL1xuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXHUwMDNjXHUwMDNjIDMxKSAtIDEpXG4rLypcbisgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpblxuKyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbisgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbisgKi9cbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiArODg0LDcgQEAgc3RydWN0IGt2bSB7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbiBcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XG4rXHR1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtcbiAjZW5kaWZcbiBcdGNoYXIgc3RhdHNfaWRbS1ZNX1NUQVRTX05BTUVfU0laRV07XG4gfTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMTA4ZDQyYzVjMWQ2YS4uMjVjMWZmMGMyYTkzZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMTI3LDcgKzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuK1x0a3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCA9IDA7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuQEAgLTI1NDQsNiArMjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCAwKTtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuK1x0dm9pZCAqZW50cnk7XG4rXG4rXHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7XG4rXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbitcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoZW50cnkpXG4rXHRcdFx0Y291bnQrKztcbitcbitcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4rXHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuK1x0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRlbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7XG5AQCAtMjU3OSw2ICsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuK1x0LypcbitcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXG4rXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXG4rXHQgKi9cbitcdGlmIChhdHRyaWJ1dGVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbitcdFx0ciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbitcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbitcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4rXHQgKi9cbitcdG11dGF0ZWQgPSB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuIFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuQEAgLTI2MDMsNiArMjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbitcdC8qXG4rXHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4rXHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuK1x0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuK1x0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbitcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4rXHQgKi9cbitcdGlmIChtdXRhdGVkKVxuK1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ2LjAwMTU4MjQzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMzc4MzI1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwncyBLVk0gc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkLiBGcm9tIHRoZSBmaWxlIGxpc3QsIGl0J3MgY2xlYXIgdGhpcyBpcyBmb2N1c2VkIG9uIG1lbW9yeSBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHk6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnN0YW50LCBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCwgc2V0IHRvIDFVTCBcdTAwM2NcdTAwM2MgMjUsIHdoaWNoIGxvb2tzIGxpa2UgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgR2xvYmFsIEZyYW1lIE51bWJlcnMgKEdGTnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy4gIEEgbmV3IGB1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtgIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGt2bWAgd2hlbiBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpcyBkZWZpbmVkLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGNvdW50aW5nIHRoZSBtZW1vcnkgYXR0cmlidXRlcy5cblxuSW4gYGt2bV9jcmVhdGVfdm0oKWAsIHdlIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGBrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50YCBzZXQgdG8gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgdXNpbmcgYW4gWEFycmF5IGZvciBtYW5hZ2luZyB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMsIHdoZXJlIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgYXJyYXkgd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2Ygb2NjdXBpZWQgZW50cmllcy5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKClgIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGlzIFhBcnJheSB0byBjYWxjdWxhdGUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIGNvdW50LlxuXG5JbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcygpYCwgYSBjcnVjaWFsIGJvdW5kIGNoZWNrIGlzIGFkZGVkOiBpZiB0aGUgcHJvcG9zZWQgR0ZOIGNvdW50IGV4Y2VlZHMgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gQWxzbywgdGhlcmUgaXMgYSBgbXV0YXRlZCA9IHRydWU7YCBmbGFnIHRvIHNpZ25hbCBhIGNoYW5nZSBpbiBtZW1vcnkgYXR0cmlidXRlcy4gRmluYWxseSwgd2hlbiB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG11dGF0ZWQsIHRoZSBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgaXMgdXBkYXRlZCBieSBjYWxsaW5nIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pYC5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgaG93IEtWTSBtZW1vcnkgYXR0cmlidXRlcyAqYWN0dWFsbHkqIHdvcmssIGFuZCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgaXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQuIEkgdGhpbmsgSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIGFsbCBpbnN0YW5jZXMgb2YgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV2YWx1YXRlIHRoZSBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjU5LjM3OTkxMDI3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5Mjc2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTg0ND1lbnVtIGt2bV9pbnRyX3R5cGUge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTg1NTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU2LSNkZWZpbmUga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKGt2bSkgKChrdm0pLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSlcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Ni1cXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODc6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctODgtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzODpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzktXFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTU2PWNvbmZpZyBLVk1fQU1EX1NFVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MjpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTgwOTQ9dm9pZCBrdm1fbW11X3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODA5OS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjgxMDA6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODEwMS1zdGF0aWMgYm9vbCBodWdlcGFnZV90ZXN0X21peGVkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxNDM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0NC1cXHRrdm1fbW11X2luaXRfbWVtc2xvdF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHNsb3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcyNj1zdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzEtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjczMjojaWZuZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzMtc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9Nzc3PXN0cnVjdCBrdm0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTg4My0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6ODg0OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODg1LVxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU2NT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU3MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzQtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9nZXRfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU5MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTQtfVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Ni1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oPTM0Nj1UUkFDRV9FVkVOVChrdm1fZGlydHlfcmluZ19leGl0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzYwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM2MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzYyLS8qXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaD0zNjc9VFJBQ0VfRVZFTlQoa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oLTM4NS0pO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM4NjojZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzg3LVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDA9Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTAyLVxcbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMjgtXFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMjk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMC1cXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTI2Nj1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEzMTQtXFx0Y2xlYW51cF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEzMTU6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTMxNi1cXHR4YV9kZXN0cm95KFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQxOT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDMyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzMzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDM0LXN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY5MS19XFxudmlydC9rdm0va3ZtX21haW4uYzoyNjkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTMtXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAwOC1cXHRcXHRyZXR1cm4gMTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwMDk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cXHRjYXNlIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVM6XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDEyLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSVJRX1JPVVRJTkcgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQxNC1cXHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQyMy1cXHR9XFxudmlydC9rdm0va3ZtX21haW4uYzo1NDI0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0MjUtXFx0Y2FzZSBLVk1fQ1JFQVRFX0RFVklDRToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjowMS41NzkxOTQ1MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjg2MzExNzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBpdHMgaW1wbGVtZW50YXRpb24gaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmVzIDI1NDAgdG8gMjY5NS4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIGZvciB0aGlzIHN5c3RlbSBjYWxsIGlzLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTQuNDQyMzE0NzYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQgKiBidXQgaXQncyBub3Qgb2J2aW91cyB0aGF0IGFsbG93aW5nIG5ldyBtYXBwaW5ncyB3aGlsZSB0aGUgYXR0cmlidXRlc1xcbjI1NDE6XFx0XFx0ICogYXJlIGluIGZsdXggaXMgZGVzaXJhYmxlIG9yIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxcbjI1NDI6XFx0XFx0ICovXFxuMjU0MzpcXHRcXHRrdm1fbW11X2ludmFsaWRhdGVfcmFuZ2VfYWRkKGt2bSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kKTtcXG4yNTQ0OlxcdFxcbjI1NDU6XFx0XFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XFxuMjU0NjpcXHR9XFxuMjU0NzpcXHRcXG4yNTQ4OlxcdC8qXFxuMjU0OTpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXFxuMjU1MDpcXHQgKiBTZXJpYWxpemF0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBpcyBwcm92aWRlZCBieSBrdm0tXFx1MDAzZXNsb3RzX2xvY2suXFxuMjU1MTpcXHQgKi9cXG4yNTUyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcXG4yNTUzOlxcdHtcXG4yNTU0OlxcdFxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xcbjI1NTU6XFx0XFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuMjU1NjpcXHRcXHR2b2lkICplbnRyeTtcXG4yNTU3OlxcdFxcbjI1NTg6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIGVudHJ5LCBVTE9OR19NQVgpIHtcXG4yNTU5OlxcdFxcdFxcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcXG4yNTYwOlxcdFxcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4yNTYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI1NjI6XFx0XFx0XFx0fVxcbjI1NjM6XFx0XFx0XFx0aWYgKGVudHJ5KVxcbjI1NjQ6XFx0XFx0XFx0XFx0Y291bnQrKztcXG4yNTY1OlxcdFxcbjI1NjY6XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuMjU2NzpcXHRcXHRcXHRcXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxuMjU2ODpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yNTY5OlxcdFxcdFxcdH1cXG4yNTcwOlxcdFxcdH1cXG4yNTcxOlxcdFxcbjI1NzI6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjI1NzM6XFx0fVxcbjI1NzQ6XFx0XFxuMjU3NTpcXHQvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxuMjU3NjpcXHRzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbjI1Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGF0dHJpYnV0ZXMpXFxuMjU3ODpcXHR7XFxuMjU3OTpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xcbjI1ODA6XFx0XFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuMjU4MTpcXHRcXHRcXHQuZW5kID0gZW5kLFxcbjI1ODI6XFx0XFx0XFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcXG4yNTgzOlxcdFxcdFxcdC5oYW5kbGVyID0ga3ZtX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXFxuMjU4NDpcXHRcXHRcXHQub25fbG9jayA9IGt2bV9tbXVfaW52YWxpZGF0ZV9zdGFydCxcXG4yNTg1OlxcdFxcdFxcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxcbjI1ODY6XFx0XFx0XFx0Lm1heV9ibG9jayA9IHRydWUsXFxuMjU4NzpcXHRcXHR9O1xcbjI1ODg6XFx0XFx0c3RydWN0IGt2bV9tbXVfbm90aWZpZXJfcmFuZ2UgcG9zdF9zZXRfcmFuZ2UgPSB7XFxuMjU4OTpcXHRcXHRcXHQuc3RhcnQgPSBzdGFydCxcXG4yNTkwOlxcdFxcdFxcdC5lbmQgPSBlbmQsXFxuMjU5MTpcXHRcXHRcXHQuYXJnLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLFxcbjI1OTI6XFx0XFx0XFx0LmhhbmRsZXIgPSBrdm1fYXJjaF9wb3N0X3NldF9tZW1vcnlfYXR0cmlidXRlcyxcXG4yNTkzOlxcdFxcdFxcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcXG4yNTk0OlxcdFxcdFxcdC5tYXlfYmxvY2sgPSB0cnVlLFxcbjI1OTU6XFx0XFx0fTtcXG4yNTk2OlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4yNTk3OlxcdFxcdHZvaWQgKmVudHJ5O1xcbjI1OTg6XFx0XFx0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XFxuMjU5OTpcXHRcXHRpbnQgciA9IDA7XFxuMjYwMDpcXHRcXG4yNjAxOlxcdFxcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0dHJhY2Vfa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdGFydCwgZW5kLCBhdHRyaWJ1dGVzKTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjA2OlxcdFxcbjI2MDc6XFx0XFx0LyogTm90aGluZyB0byBkbyBpZiB0aGUgZW50aXJlIHJhbmdlIGhhcyB0aGUgZGVzaXJlZCBhdHRyaWJ1dGVzLiAqL1xcbjI2MDg6XFx0XFx0aWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpXFxuMjYwOTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjYxMDpcXHRcXG4yNjExOlxcdFxcdC8qXFxuMjYxMjpcXHRcXHQgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvblxcbjI2MTM6XFx0XFx0ICogS1ZNX01FTV9BVFRSX01BWF9HRk5TLlxcbjI2MTQ6XFx0XFx0ICovXFxuMjYxNTpcXHRcXHRpZiAoYXR0cmlidXRlcyBcXHUwMDI2XFx1MDAyNlxcbjI2MTY6XFx0XFx0ICAgIGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ICsgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUykge1xcbjI2MTc6XFx0XFx0XFx0ciA9IC1FTk9TUEM7XFxuMjYxODpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjYxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjE0LjQ0MjU2MDcwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMTI2MDQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGluZyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJlYWNoZWQgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgc2V0IHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWwgbWFjaGluZS4gTXkgZm9jdXMgaXMgbm93IG9uIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItcHJvdmlkZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gVGhpcyB3aWxsIGJlIGFuIGltcG9ydGFudCBzdGVwIGluIG1hcHBpbmcgb3V0IGhvdyBtZW1vcnkgZ2V0cyBoYW5kbGVkIGFuZCB2aXJ0dWFsaXplZCBhdCB0aGUgbG93IGxldmVsLiBJJ2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgSSBnbyB0aHJvdWdoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoxNi41NTUxNjgwNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTExMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjIwOlxcdFxcbjI2MjE6XFx0XFx0LypcXG4yNjIyOlxcdFxcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxcbjI2MjM6XFx0XFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxcbjI2MjQ6XFx0XFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4yNjI1OlxcdFxcdCAqL1xcbjI2MjY6XFx0XFx0bXV0YXRlZCA9IHRydWU7XFxuMjYyNzpcXHRcXG4yNjI4OlxcdFxcdC8qXFxuMjYyOTpcXHRcXHQgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXNcXG4yNjMwOlxcdFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG4yNjMxOlxcdFxcdCAqL1xcbjI2MzI6XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbjI2MzM6XFx0XFx0XFx0ciA9IHhhX3Jlc2VydmUoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMjYzNDpcXHRcXHRcXHRpZiAocilcXG4yNjM1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjM2OlxcdFxcbjI2Mzc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYzODpcXHRcXHR9XFxuMjYzOTpcXHRcXG4yNjQwOlxcdFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xcbjI2NDE6XFx0XFxuMjY0MjpcXHRcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuMjY0MzpcXHRcXHRcXHRyID0geGFfZXJyKHhhX3N0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBpLCBlbnRyeSxcXG4yNjQ0OlxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG4yNjQ1OlxcdFxcdFxcdEtWTV9CVUdfT04ociwga3ZtKTtcXG4yNjQ2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZwb3N0X3NldF9yYW5nZSk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdG91dF91bmxvY2s6XFxuMjY1MjpcXHRcXHQvKlxcbjI2NTM6XFx0XFx0ICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZVxcbjI2NTQ6XFx0XFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4yNjU1OlxcdFxcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcXG4yNjU2OlxcdFxcdCAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlXFxuMjY1NzpcXHRcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbjI2NTg6XFx0XFx0ICovXFxuMjY1OTpcXHRcXHRpZiAobXV0YXRlZClcXG4yNjYwOlxcdFxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4yNjYxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0cmV0dXJuIHI7XFxuMjY2NDpcXHR9XFxuMjY2NTpcXHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbjI2NjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXFxuMjY2NzpcXHR7XFxuMjY2ODpcXHRcXHRnZm5fdCBzdGFydCwgZW5kO1xcbjI2Njk6XFx0XFxuMjY3MDpcXHRcXHQvKiBmbGFncyBpcyBjdXJyZW50bHkgbm90IHVzZWQuICovXFxuMjY3MTpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZWZsYWdzKVxcbjI2NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY3MzpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiB+a3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pKVxcbjI2NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY3NTpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZXNpemUgPT0gMCB8fCBhdHRycy1cXHUwMDNlYWRkcmVzcyArIGF0dHJzLVxcdTAwM2VzaXplIFxcdTAwM2MgYXR0cnMtXFx1MDAzZWFkZHJlc3MpXFxuMjY3NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjc3OlxcdFxcdGlmICghUEFHRV9BTElHTkVEKGF0dHJzLVxcdTAwM2VhZGRyZXNzKSB8fCAhUEFHRV9BTElHTkVEKGF0dHJzLVxcdTAwM2VzaXplKSlcXG4yNjc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2Nzk6XFx0XFxuMjY4MDpcXHRcXHRzdGFydCA9IGF0dHJzLVxcdTAwM2VhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMjY4MTpcXHRcXHRlbmQgPSAoYXR0cnMtXFx1MDAzZWFkZHJlc3MgKyBhdHRycy1cXHUwMDNlc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4yNjgyOlxcdFxcbjI2ODM6XFx0XFx0LypcXG4yNjg0OlxcdFxcdCAqIHhhcnJheSB0cmFja3MgZGF0YSB1c2luZyBcXFwidW5zaWduZWQgbG9uZ1xcXCIsIGFuZCBhcyBhIHJlc3VsdCBzbyBkb2VzXFxuMjY4NTpcXHRcXHQgKiBLVk0uICBGb3Igc2ltcGxpY2l0eSwgc3VwcG9ydHMgZ2VuZXJpYyBhdHRyaWJ1dGVzIG9ubHkgb24gNjQtYml0XFxuMjY4NjpcXHRcXHQgKiBhcmNoaXRlY3R1cmVzLlxcbjI2ODc6XFx0XFx0ICovXFxuMjY4ODpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKSAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKTtcXG4yNjkxOlxcdH1cXG4yNjkyOlxcdCNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG4yNjkzOlxcdFxcbjI2OTQ6XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuMjY5NTpcXHR7XFxuMjY5NjpcXHRcXHRyZXR1cm4gX19nZm5fdG9fbWVtc2xvdChrdm1fbWVtc2xvdHMoa3ZtKSwgZ2ZuKTtcXG4yNjk3OlxcdH1cXG4yNjk4OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChnZm5fdG9fbWVtc2xvdCk7XFxuMjY5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTYuNTU1NTYxODY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYzOTQxNzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb250ZXh0LCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEtWTSBNZW1vcnkgQXR0cmlidXRlIFNldHRpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGhvdyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBrdm1fdm1faW9jdGxgIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cCBhbmQgbWFuYWdlZCBmb3IgYSBLVk0gdmlydHVhbCBtYWNoaW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb250cm9sIGZsb3cgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXIgc3BhY2UgcmVxdWVzdHMgYW5kIHRoZSBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBvZiB0aGlzIElPQ1RMOiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHRvIG1vZGlmeSBhc3BlY3RzIG9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBzZXR0aW5nIG1lbW9yeSByZWdpb25zIGFzIGRldmljZSBtZW1vcnksIG1ha2luZyBpdCByZXNlcnZlZCwgcGVyaGFwcyBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMgd2l0aGluIHRoZSBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hcC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHR5cGVzIG9mIElPQ1RMIGNhbGxzIGFyZSBzZW5zaXRpdmUuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBpbnB1dHMgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyZSBtZXQuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGBrdm1fdm1faW9jdGxgIHNpZGUgb2YgdGhpbmdzLiBUaGlzIGlzIHdoZXJlIHRoZSBJT0NUTCBjYWxscyBjb21lIGluLiBga3ZtX3ZtX2lvY3RsYCBpcyB0aGUgY2VudHJhbCBkaXNwYXRjaCBmb3IgYWxsIFZNLWxldmVsIGNvbnRyb2wgY29tbWFuZHMuIEl0J3MgZXNzZW50aWFsbHkgdGhlIGdhdGVrZWVwZXIuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGUgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIHJlcXVlc3QgaXMgcm91dGVkIGZyb20gdGhlIGluaXRpYWwgdXNlciBzcGFjZSBpbnZvY2F0aW9uIHRocm91Z2ggdGhhdCBga3ZtX3ZtX2lvY3RsYCBzd2l0Y2ggc3RhdGVtZW50LiBXaGF0IGFyZSB0aGUgYXJndW1lbnQgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBzdGVwcyBhbG9uZyB0aGUgd2F5PyBUaGF0J3MgcHJvYmFibHkgd2hlcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBhcmUsIG9yIGF0IGxlYXN0IHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBXaGF0IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBib3RoIGluIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZT8gV2hhdCBmaWVsZHMgZG8gdGhleSBjb250YWluPyBIb3cgYXJlIHRoZXNlIHZhbHVlcyBpbnRlcnByZXRlZCBieSB0aGUgS1ZNIGNvcmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGZvcm1hdCBzdHJpbmcgYnVncz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBJLCBmb3IgaW5zdGFuY2UsIHNldCBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24gYXMgZGV2aWNlIG1lbW9yeS4gVGhlIEtWTSBjb3JlIG5lZWRzIHRvIGNvbW11bmljYXRlIHRob3NlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlIE1NVSBhbmQgZGV2aWNlIGVtdWxhdGlvbiBsYXllcnMuXG5cbkknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvby4gTWVtb3J5IGF0dHJpYnV0ZXMgbGlrZWx5IHRvdWNoIHZhcmlvdXMgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgc28gdGhlIGtlcm5lbCBuZWVkcyB0byBlbmZvcmNlIGNvbmN1cnJlbmN5IGNvbnRyb2wgdG8gcHJldmVudCBjb3JydXB0aW9uLiBBcmUgc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1UgdXNlZD8gSWYgc28sIHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoZXNlIGxvY2tzPyBBcmUgdGhleSBmaW5lLWdyYWluZWQgb3IgY29hcnNlLWdyYWluZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciBwcmlvcml0eSBpbnZlcnNpb24/IEkgc2hvdWxkIGFsc28gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGVsZW1lbnRzIG9mIHRoZSBoeXBlcnZpc29yLiBIb3cgZG9lcyB0aGlzIGFmZmVjdCBwYWdlIHRhYmxlcz8gV2hhdCBoYXBwZW5zIHdpdGggTlVNQSBub2Rlcz9cblxuRmluYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBjYWxsIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhIHNwZWNpZmljIGVycm9yIGNvZGU/IEhvdyBhcmUgdGhlc2UgZXJyb3JzIGhhbmRsZWQgYnkgdXNlcnNwYWNlPyBBcmUgdGhlIGVycm9ycyBzdWZmaWNpZW50bHkgaW5mb3JtYXRpdmU/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3M/IFdoYXQgYXJlIHRoZSByZWNvdmVyeSBwYXRocyBhZnRlciBhbiBlcnJvcj8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGJlY2F1c2UgbWVtb3J5IHNldHRpbmcgaXMgYSB2ZXJ5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLlxuXG5JbiBzdW1tYXJ5LCBteSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb250cm9sIGZsb3csIGFyZ3VtZW50IHZhbGlkYXRpb24sIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgb2YgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGFzIGl0J3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgaW5zdGFiaWxpdHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQsIGFuZCBJJ20gdHJlYXRpbmcgdGhpcyBsaWtlIGEgcmV2ZXJzZSBlbmdpbmVlcmluZyBwcm9qZWN0IG9mIHNvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjEuMTk0OTgyNDkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0XFx0YnJlYWs7XFxuNTQxMTpcXHRcXHR9XFxuNTQxMjpcXHQjZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0lSUV9ST1VUSU5HICovXFxuNTQxMzpcXHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuNTQxNDpcXHRcXHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcXG41NDE1OlxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgYXR0cnM7XFxuNTQxNjpcXHRcXG41NDE3OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjU0MTg6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhdHRycywgYXJncCwgc2l6ZW9mKGF0dHJzKSkpXFxuNTQxOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41NDIwOlxcdFxcbjU0MjE6XFx0XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoa3ZtLCBcXHUwMDI2YXR0cnMpO1xcbjU0MjI6XFx0XFx0XFx0YnJlYWs7XFxuNTQyMzpcXHRcXHR9XFxuNTQyNDpcXHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXFxuNTQyNTpcXHRcXHRjYXNlIEtWTV9DUkVBVEVfREVWSUNFOiB7XFxuNTQyNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UgY2Q7XFxuNTQyNzpcXHRcXG41NDI4OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjU0Mjk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjZCwgYXJncCwgc2l6ZW9mKGNkKSkpXFxuNTQzMDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41NDMxOlxcdFxcbjU0MzI6XFx0XFx0XFx0ciA9IGt2bV9pb2N0bF9jcmVhdGVfZGV2aWNlKGt2bSwgXFx1MDAyNmNkKTtcXG41NDMzOlxcdFxcdFxcdGlmIChyKVxcbjU0MzQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjIxLjE5NTIxNDQ2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjU1NjM1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNZW1vcnkgQXR0cmlidXRlIFRob3VnaHRzKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBga3ZtX3ZtX2lvY3RsYCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBcIkNhbiB3ZSBldmVuIGdldCBoZXJlP1wiIE9mIGNvdXJzZSB3ZSBjYW4hIFRoaXMgaXMgS1ZNIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIGEgY29yZSBjb21wb25lbnQgb2YgTGludXggdmlydHVhbGl6YXRpb24uIEEgdXNlciBwcm9jZXNzIGhhcyB0byBvcGVuIGAvZGV2L2t2bWAsIGNyZWF0ZSBhIHZpcnR1YWwgbWFjaGluZSB1c2luZyBgaW9jdGwoa3ZtX2ZkLCBLVk1fQ1JFQVRFX1ZNLCAuLi4pYC4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgY2FuIHlvdSBsZWdpdGltYXRlbHkgY2FsbCBgaW9jdGxgIHdpdGggYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgISBHb3QgaXQuXG5cbk5vdywgdG8gZ2V0IGRvd24gdG8gZGV0YWlscywgSSB3YW50IHRvIGNsYXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBhbmQsIGZvciB0aGF0IG1hdHRlciwgd2hhdCBpcyB0aGUgaW1wYWN0IG9mIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjIzLjQ1MDg1MjU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MTQ0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMD1jb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjUuMjg4MDA0MTEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODA5Njc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgU2VsZWN0aW9uIG9mIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgZWFybGllciBncmVwIG91dHB1dCBnYXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIHNvIEkga25vdyBpdCdzIGJlaW5nIHNlbGVjdGVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZTpcblxuKiAgIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBvbiBgS1ZNX1g4NmAgYW5kIGBYODZfNjRgLlxuKiAgIGBLVk1fSU5URUxfVERYYCBpZiBgSU5URUxfVERYX0hPU1RgIGlzIGVuYWJsZWQuXG4qICAgYEtWTV9BTURfU0VWYCwgd2hpY2ggc2VlbXMgdG8gYmUgbGlua2VkIHRvIGBBUkNIX0hBU19DQ19QTEFURk9STWAuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBnbyBiYWNrIGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoZSBwcmVjaXNlIGRlcGVuZGVuY3kgY2hhaW4uIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjI5Ljg2ODk3NjQwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIuXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuICA4NDpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAgODc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuICA4ODpcXHRcXHRoZWxwXFxuICA4OTpcXHRcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXFxuICA5MDpcXHRcXHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXFxuICA5MTpcXHRcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuICA5MjpcXHRcXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFxcXCJOXFxcIi5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG4gMTE2OlxcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcXG4gMTE3OlxcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJ3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxcbiAxMTg6XFx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjI5Ljg2OTA3MDc4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxMjkwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgQU1EIFNFViBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIldlIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nLlwiIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCdzIHN1cHBvcnQgZm9yIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZGl2ZSBpbiB0aGVyZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBLVk1fQU1EX1NFVmAgY29uZmlnIG9wdGlvbiBoYXMgYmVlbiBjb3JyZWN0bHkgZW5hYmxlZCBvciBwcm9wZXJseSBkZWZpbmVkLiBBbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiB0aGUgYEtjb25maWdgIGZpbGVzIG11c3QgYmUgdGhvcm91Z2hseSByZXZpZXdlZC4gVGhpcyBkZXRhaWxlZCBjaGVjayB3aWxsIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSByZWFkeSB0byBwcm9jZWVkIHdpdGggbW9yZSB0ZXN0aW5nIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjMxLjk0MDM2Mzk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxNjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjc6XFx0XFx0aGVscFxcbiAxNjg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MDpcXHRcXHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNzE6XFx0XFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgS1ZNX0lPQVBJQ1xcbiAxNzQ6XFx0XFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuIDE3NTpcXHRcXHRkZWZhdWx0IHlcXG4gMTc2OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXFxuIDE3OTpcXHRcXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODI6XFx0XFxuIDE4MzpcXHRjb25maWcgS1ZNX1NNTVxcbiAxODQ6XFx0XFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjMxLjk0MDQ0MjYxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzI0NjM0MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBoYW5kbGVzIG1lbW9yeSBhdHRyaWJ1dGVzIGFuZCBob3cgdGhleSdyZSBzZWxlY3RlZC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbnMgc2hvdyB0aGF0IGJvdGggYEtWTV9TV19QUk9URUNURURfVk1gIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBjb25maWd1cmVkIHRvIHNlbGVjdCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBzZXJ2ZXMgYXMgYSBzb3J0IG9mIGNvbW1vbiBncm91bmQgZm9yIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlY2hub2xvZ2llcy4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaDsgSSBuZWVkIHRvIGRldGVybWluZSBpZiBvdGhlciBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxzbyB1dGlsaXplIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHNoYXJlIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjozNC42NjUwODEwNjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjI1MzU1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0LipLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODYtXFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg4LVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM3LVxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM5LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTYzLVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjozNy4wODc2MzMwMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU5NDI4NjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YODZgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9uIHN5bWJvbHMgcmVsYXRlZCB0byBLVk0sIGZvY3VzaW5nIG9uIGBjb25maWcgS1ZNYCBhbmQgYGNvbmZpZyBLVk1fWDg2YC4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUga2V5IGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQwLjY4MTkyMjM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgOTpcXHRcXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTM6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDAuNjgyMDA5NDc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3NDQ5NzQ5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBLVk0gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb24geDg2XzY0LCBhbmQgaXQgbG9va3MgbGlrZSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0gKHNwZWNpZmljYWxseSBLVk0sIG9yIEtWTV9JTlRFTC9LVk1fQU1EKSwgYW5kIHdlIGVuYWJsZSBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIHdoaWNoIGl0c2VsZiBoaW5nZXMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgIGJlaW5nIGluIHBsYWNlLCB3ZSBhbHNvIGdldCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIHNlbGVjdGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGlmIGBLVk1fQU1EYCBpcyBlbmFibGVkLCB0aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFzIGxvbmcgYXMgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBwcmVzZW50LiBBbmQganVzdCB0byBiZSBjbGVhciwgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGNvbmZpZ3VyZWQgdW5kZXIgdGhlIGBWSVJUVUFMSVpBVElPTmAgbWVudS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHN5emthbGxlciB0YXJnZXQgS1ZNPyBZZXMsIGl0IGRvZXMhIFRoYXQncyBleGNlbGxlbnQuIEtWTSBpcyBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSBmdXp6ZWQgc3Vic3lzdGVtcyBieSBzeXprYWxsZXIuIEknbSBzZWVpbmcgaXQgdGFyZ2V0aW5nIGAvZGV2L2t2bWAsIGFuZCB2YXJpb3VzIGlvY3RscyBsaWtlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCwgYEtWTV9DUkVBVEVfVk1gLCBhbmQgb3RoZXJzLlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGFuZCBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zIG9yIGtlcm5lbCBjb2RlLCBidXQgSSBiZXQgSSdsbCBlbmQgdXAgbG9va2luZyBpbiB0aGUga2VybmVsIGhlYWRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODk4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDQuNDI2OTg2ODU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNzY5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzODc9aXMgJzAnIGZvciBhbGwgZ2Zucy4gIFVzZXJzcGFjZSBjYW4gY29udHJvbCB3aGV0aGVyIG1lbW9yeSBpcyBzaGFyZWQvcHJpdmF0ZSBieVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2Mzg4OnRvZ2dsaW5nIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEUgdmlhIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgYXMgbmVlZGVkLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Mzg5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzOTQ9UmV0dXJucyAtRUlOVkFMIGlmIGNhbGxlZCBvbiBhIHByb3RlY3RlZCBWTS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM5NS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM5Njo0LjE0MSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzOTctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MDU6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBhbGxvd3MgdXNlcnNwYWNlIHRvIHNldCBtZW1vcnkgYXR0cmlidXRlcyBmb3IgYSByYW5nZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDA2LW9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3Q9NTA1PUtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEUgYXR0cmlidXRlIHNldCBpbiBhZHZhbmNlLiBTZWUgdGhlIGRvY3VtZW50YXRpb25cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9hbWQtbWVtb3J5LWVuY3J5cHRpb24ucnN0OjUwNjpmb3IgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgYXNwZWN0LlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3QtNTA3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0xNjE9Tm90ZSwgYmVmb3JlIGNhbGxpbmcgdGhpcyBzdWIgY29tbWFuZCwgbWVtb3J5IGF0dHJpYnV0ZSBvZiB0aGUgcmFuZ2VcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2Mi1bZ3BhLCBncGEgKyBucl9wYWdlc10gbmVlZHMgdG8gYmUgcHJpdmF0ZS4gIFVzZXJzcGFjZSBjYW4gdXNlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoxNjM6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyB0byBzZXQgdGhlIGF0dHJpYnV0ZS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQyMT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYwLVxcdCAqICAgMSkgVGhlIGJhY2tpbmcgbWVtc2xvdCBpcyBhIHZhbGlkIHByaXZhdGUgbWVtc2xvdC5cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0NjE6XFx0ICogICAyKSBUaGUgR0ZOIGhhcyBiZWVuIHNldCB0byBwcml2YXRlIHZpYSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYyLVxcdCAqICAgICAgYmVmb3JlaGFuZC5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2Ny1cXHQgKiBmYXVsdHMgaWYgdGhlcmUncyBhIHJhY2UgYmV0d2VlbiBhIGZhdWx0IGFuZCBhbiBhdHRyaWJ1dGUgdXBkYXRlIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ2ODpcXHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTLCBhbmQgYSBzaW1pbGFyIGFwcHJvYWNoIGNvdWxkIGJlIHV0aWxpemVkXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDY5LVxcdCAqIGhlcmUuIEhvd2V2ZXIsIGt2bS1cXHUwMDNlc2xvdHNfbG9jayBndWFyZHMgYWdhaW5zdCBib3RoIHRoaXMgYXMgd2VsbCBhc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTU2MD1zdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU3OC0gKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NTc5OiAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNTgwLSAqIGtlcm5lbCBtZW1vcnkgcGVyIEdGTikgb24gR0ZOcyB3aXRoIG5vIGJhY2tpbmcgbWVtb3J5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTM9aW50IGt2bV9hcmNoX2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzQtICogaGVsZCBzbyB0aGF0IGNhbGxlci1lbmZvcmNlZCBpbnZhcmlhbnRzIHJlZ2FyZGluZyB0aGUgZXhwZWN0ZWQgbWVtb3J5XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MzU6ICogYXR0cmlidXRlcyBvZiB0aGUgR1BBIHJhbmdlIGRvIG5vdCByYWNlIHdpdGggS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUy5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYzNi0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MTg9c3RydWN0IGt2bV9zdGF0c19kZXNjIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ2LS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0NzojZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGQyLCBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ4LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MTQ9c3RydWN0IGt2bV9zdGF0c19kZXNjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQyLS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0MzojZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGQyLCBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD00MjE9c3RhdGljIGlubGluZSB2b2lkIHZtX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgZ3BhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzEtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjQzMjpcXHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIG92ZXJ3cml0ZXMgX2FsbF8gYXR0cmlidXRlcy4gIFRoZXNlIGZsb3dzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzMtXFx0ICogbmVlZCBzaWduaWZpY2FudCBlbmhhbmNlbWVudHMgdG8gc3VwcG9ydCBtdWx0aXBsZSBhdHRyaWJ1dGVzLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo0Mzg6XFx0dm1faW9jdGwodm0sIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMsIFxcdTAwMjZhdHRyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzOS19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTQ6XFx0Y2FzZSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTOiB7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDE1LVxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgYXR0cnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQ2LjA2ODc2NTQzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODkyNzI5Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBNZW1vcnkgQXR0cmlidXRlIEhhcmRlbmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBnaXQgY29tbWl0IGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBhIGhhcmRlbmluZyBib3VuZCBmb3IgYG1lbV9hdHRyX2FycmF5YC4gRmlyc3QsIGl0IGluaXRpYWxpemVzIHRoaXMgYXJyYXkgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYXQgVk0gY3JlYXRpb24gYW5kIGFsc28gaW5pdGlhbGl6ZXMgYGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uXG5cblRoZW4sIGl0IGltcGxlbWVudHMgYSBuZXcgZnVuY3Rpb24sIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHRvIGNvdW50IHRoZSBlbnRyaWVzIGluIGBtZW1fYXR0cl9hcnJheWAuIEkgc2VlIGl0IHVzZXMgYHhhc19mb3JfZWFjaGAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSB4YXJyYXkuIFRoYXQncyBmaW5lLCBidXQgd2FpdCBhIHNlY29uZC4uLiBpdCBjYWxscyBgeGFzX3BhdXNlYCB3aXRoaW4gdGhlIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AgY29udGV4dC4gKipUaGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLioqIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGxvY2tkZXAgcHJvYmxlbXMsIGFueSBidWdzIGx1cmtpbmcgaW4gdGhlIHhhcnJheSB0cmF2ZXJzYWwgbG9naWMsIG9yIGV2ZW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBEb1MgdnVsbmVyYWJpbGl0aWVzLCBvciBSQ1UtcmVsYXRlZCBwcm9ibGVtcyBzdGVtbWluZyBmcm9tIHRoaXMuIEl0J3MgY2FsbGluZyBgeGFzX2Zvcl9lYWNoYCAqd2hpbGUgaG9sZGluZyogYSBsb2NrOyB0aGF0IGFsd2F5cyByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5GdXJ0aGVyLCB0aGVyZSdzIGEgbmV3IGNoZWNrIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCB0aGF0IHJldHVybnMgYC1FTk9TUENgIGlmIHRoZSBudW1iZXIgb2YgR0ZOUyBleGNlZWRzIGEgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHJlc291cmNlIGxpbWl0cy4gVGhlIGB4YV9pbml0YCBmdW5jdGlvbiBpcyBjaGFuZ2VkIHRvIGB4YV9pbml0X2ZsYWdzYCBhbmQgYG1lbV9hdHRyX2dmbl9jb3VudGAgaXMgdHJhY2tlZC4gQW5kIHRoaXMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgKnVuZGVyIHRoZSBzYW1lIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AqLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYmVjYXVzZSB0aGlzIGlzIEtWTSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFjY2Vzc2VkIHZpYSBgaW9jdGwodm1fZmQsIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpYC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgYWxsIHdvcmtzIGFzIGV4cGVjdGVkIHVuZGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcy4gQ2FuIHRoaXMgcnVuIGluIFFFTVUgb24gYW1kNjQ/IFllcywgaXQgbG9va3MgbGlrZSBRRU1VIHdpdGggYSBndWVzdCBrZXJuZWwgaGF2aW5nIGBDT05GSUdfS1ZNYCwgYW5kIGBDT05GSUdfS1ZNX1NXX1BST1RFQ1RFRF9WTT15YCBvciBgQ09ORklHX0tWTV9JTlRFTD15YC9gQ09ORklHX0tWTV9BTUQ9eWAgaXMgdGhlIHVzdWFsIHNldHVwLiBLVk0gdGVzdHMgYW5kIHN5emthbGxlciBmdXp6aW5nIGlzIHR5cGljYWxseSBkb25lIHdpdGhpbiBRRU1VIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBJJ20gbm93IGN1cmlvdXM6IGNhbiBLVk0gY3JlYXRlIHRoZXNlIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgd2l0aG91dCByZWx5aW5nIG9uIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uPyBMZXQncyBjaGVjayBmb3IgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCB0byBiZSBzdXJlLCBvciBtb3JlIGJyb2FkbHksIGxldCdzIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIGBoYXNfcHJpdmF0ZV9tZW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1Mi45NjE0OTc3NTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM1NDY4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTk1MTI9bWVhbnMgdGhlIFZNIHR5cGUgd2l0aCB2YWx1ZSBAbiBpcyBzdXBwb3J0ZWQuICBQb3NzaWJsZSB2YWx1ZXMgb2YgQG4gYXJlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE0LSAgI2RlZmluZSBLVk1fWDg2X0RFRkFVTFRfVk1cXHQwXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk1MTU6ICAjZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXFx0MVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE2LSAgI2RlZmluZSBLVk1fWDg2X1NFVl9WTVxcdDJcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTIwLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIxOk5vdGUsIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGlzIGN1cnJlbnRseSBvbmx5IGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTUyMjpEbyBub3QgdXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGZvciBcXFwicmVhbFxcXCIgVk1zLCBhbmQgZXNwZWNpYWxseSBub3QgaW5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUyMy1wcm9kdWN0aW9uLiAgVGhlIGJlaGF2aW9yIGFuZCBlZmZlY3RpdmUgQUJJIGZvciBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zIGlzXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcwLSNkZWZpbmUgS1ZNX1g4Nl9ERUZBVUxUX1ZNXFx0MFxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTcxOiNkZWZpbmUgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cXHQxXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NFVl9WTVxcdFxcdDJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXFx0ICAgICEoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XFx0ICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVxcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKGNyMl9vcl9ncGEpKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk1OC1cXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NTk6XFx0Y2FzZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Njk5OT1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tWTV9TV19QUk9URUNURURfVk0pIFxcdTAwMjZcXHUwMDI2IHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzEyNTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzEyNi1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTItXFx0a3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NTM6XFx0XFx0KHR5cGUgPT0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODU0LVxcdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTUtXFx0a3ZtLVxcdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkID1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTg1NjpcXHRcXHR0eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSB8fCB0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODU3LVxcdGt2bS1cXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFxcdTAwMjYga3ZtX2NhcHMuc3VwcG9ydGVkX3F1aXJrcztcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzAtI2RlZmluZSBLVk1fWDg2X0RFRkFVTFRfVk1cXHQwXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzE6I2RlZmluZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTVxcdDFcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU0VWX1ZNXFx0XFx0Mlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTIyMD1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTIyNS0jaWZkZWYgX194ODZfNjRfX1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoyMjY6XFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNzpcXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0yMjgtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTM0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbWVtb3J5X3JlZ2lvbl9mbGFncyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM1ODpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozNTk6XFx0XFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzYwLVxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzQ6XFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODM6XFx0dm0yID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4NC1cXHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxMTpcXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy02NDQtXFx0aWYgKGt2bV9oYXNfY2FwKEtWTV9DQVBfR1VFU1RfTUVNRkQpIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo2NDU6XFx0ICAgIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFxcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0Ni1cXHRcXHR0ZXN0X2FkZF9wcml2YXRlX21lbW9yeV9yZWdpb24oKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0zODYtXFx0XFx0Lm1vZGUgPSBWTV9NT0RFX0RFRkFVTFQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzg3OlxcdFxcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzg4LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz00NTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQ1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0NTc6XFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9NDI9Y29uc3Qgc3RydWN0IHZtX3NoYXBlIHByb3RlY3RlZF92bV9zaGFwZSA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDMtXFx0Lm1vZGUgPSBWTV9NT0RFX0RFRkFVTFQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjQ0OlxcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTQ1LX07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9MTEzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTExNC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjExNTpcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYy0xMTYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTc2PXZvaWQgdGVzdF92bV90eXBlcyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04Ny1cXHRcXHRcXHQgICBcXFwiVk0gdHlwZSBpcyBLVk1fWDg2X0RFRkFVTFRfVk1cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFxcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg5OlxcdFxcdHRlc3RfaW5pdDJfaW52YWxpZChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgXFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6OTA6XFx0XFx0XFx0XFx0ICAgXFxcIlZNIHR5cGUgaXMgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTkxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NTQuNjU1MDUxMTQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NDAzNDM1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBNZW1vcnkgQXR0cmlidXRlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGBrdm1fY3JlYXRlX3ZtYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyB3ZSBjYW4gYWN0dWFsbHkgdXNlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYC4gVGhhdCdzIHdoZXJlIGl0J3MgYXBwbGllZCwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZGl0aW9ucy4gR29vZCBmaXJzdCBzdGVwOiBJJ2xsIGltbWVkaWF0ZWx5IGRpZyBpbnRvIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSlgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxsb3dhYmxlIG1lbW9yeSBhdHRyaWJ1dGVzIGFuZCBwb3RlbnRpYWxseSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgbGltaXRhdGlvbnMgb3IgcmVxdWlyZW1lbnRzIGZvciB0aGUgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGNhbGwuIEkgbmVlZCB0byBzZWUgd2hhdCBmYWN0b3JzIGluZmx1ZW5jZSB3aGF0J3Mgc3VwcG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjU4LjA5NTM5NzE1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTQwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MTk9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0va3ZtX21haW4uYzoyNDM0OnN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDM1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQ0Nj1ib29sIGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDUyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQ1MzpcXHRtYXNrIFxcdTAwMjY9IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTQtXFx0aWYgKGF0dHJzIFxcdTAwMjYgfm1hc2spXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY3Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI2NzM6XFx0aWYgKGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzIFxcdTAwMjYgfmt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cXHRjYXNlIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVM6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MDExOlxcdFxcdHJldHVybiBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MDEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1OC4xNDMwMTYzMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc2NTYyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGUgS1ZNIG1vZHVsZSBpcyBkb2luZyB0byBkZXRlcm1pbmUgc3VwcG9ydGVkIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQgaHlwZXJjYWxscyBhcmUgYmVpbmcgbWFkZT8gQXJlIHdlIHJlbHlpbmcgb24gTVNScywgb3IgcGFyc2luZyBBQ1BJIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgdG8gYXNjZXJ0YWluIHRoZSBwbGF0Zm9ybSdzIG1lbW9yeSBjYXBhYmlsaXRpZXM/XG5cbkknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBpdCB3aWxsIHRlbGwgbWUgaG93IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBoYW5kbGVzIE5VTUEgbm9kZXMsIEh1Z2VQYWdlcywgbWVtb3J5IGhvdHBsdWcsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWVtb3J5IGZlYXR1cmVzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBvZiBhIGhhcmR3YXJlIGZlYXR1cmUgb3IgaWYgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBuZWdvdGlhdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBkaWZmZXJlbnQgdmVuZG9yIGltcGxlbWVudGF0aW9ucyB0aGF0IEkga25vdyBleGlzdHMuIEFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIG9yIGNoaXBzZXQgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGlmIHRoZSBjaGVjayBmYWlscywgaXMgaXQgZ3JhY2VmdWw/IFdoYXQgZG9lcyBLVk0gZG8gaW4gdGhlIGV2ZW50IHRoYXQgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG5vdCBhdmFpbGFibGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDEyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MDIuOTA4NjQ1NTk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0fVxcbjI0MzE6XFx0I2VuZGlmIC8qIENPTkZJR19LVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QgKi9cXG4yNDMyOlxcdFxcbjI0MzM6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbjI0MzQ6XFx0c3RhdGljIHU2NCBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSlcXG4yNDM1OlxcdHtcXG4yNDM2OlxcdFxcdGlmICgha3ZtIHx8IGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pKVxcbjI0Mzc6XFx0XFx0XFx0cmV0dXJuIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEU7XFxuMjQzODpcXHRcXG4yNDM5OlxcdFxcdHJldHVybiAwO1xcbjI0NDA6XFx0fVxcbjI0NDE6XFx0XFxuMjQ0MjpcXHQvKlxcbjI0NDM6XFx0ICogUmV0dXJucyB0cnVlIGlmIF9hbGxfIGdmbnMgaW4gdGhlIHJhbmdlIFtAc3RhcnQsIEBlbmQpIGhhdmUgYXR0cmlidXRlc1xcbjI0NDQ6XFx0ICogc3VjaCB0aGF0IHRoZSBiaXRzIGluIEBtYXNrIG1hdGNoIEBhdHRycy5cXG4yNDQ1OlxcdCAqL1xcbjI0NDY6XFx0Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4yNDQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxcbjI0NDg6XFx0e1xcbjI0NDk6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2a3ZtLVxcdTAwM2VtZW1fYXR0cl9hcnJheSwgc3RhcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowMi45MDg5NjUyOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTIyMDYxOTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTWFuYWdlbWVudCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgZmVhdHVyZXMgd29yaywgcGFydGljdWxhcmx5IHRoZSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLCBhbmQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIHJlbGF0ZWQgY29kZS5cblxuRmlyc3QsIHRoZSBjb2RlIGNoZWNrcyBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlc2AgYmFzZWQgb24gdGhlIFZNIHR5cGUuIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgZW5hYmxlcyBwcml2YXRlIG1lbW9yeSBhdHRyaWJ1dGVzLiBFdmVuIGlmIGF0dHJpYnV0ZXMgYXJlIGNsZWFyZWQgKHNldCB0byAwKSwgdGhpcyBpcyBhbGxvd2VkLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgZG9lc24ndCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIChsaWtlIFNFViBvciBURFgpOyBpdCdzIHNvZnR3YXJlLWJhc2VkIGFuZCB0ZXN0LW9yaWVudGVkLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZW5hYmxlIHRoaXMsIEkgbmVlZCBgS1ZNYCAob3IgYEtWTV9JTlRFTGAvYEtWTV9BTURgKSwgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBpdHNlbGYgbmVlZHMgYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgKnNlbGVjdHMqIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIENydWNpYWxseSwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpcyAqbm90KiBkaXJlY3RseSBwcm9tcHRlZCBpbiB0aGUgS2NvbmZpZywgbWVhbmluZyBzaW1wbHkgc2V0dGluZyBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTPXlgIG1pZ2h0ICpub3QqIGJlIGVub3VnaC4gSXQgd2lsbCBiZSBlbmFibGVkIG9ubHkgaWYgaXQgaXMgc2VsZWN0ZWQuIEkgY2FuIGFsc28gdXNlIGBLVk1fQU1EX1NFVmAgKHdoaWNoIGRlcGVuZHMgb24gYEtWTV9BTURgIGFuZCBgWDg2XzY0YCkgb3IgYEtWTV9JTlRFTF9URFhgLiBJdCBpcyBiZXN0IGlmIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBpcyB1c2VkLCBhbmQgdGhlbiB0ZXN0IHRoZSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gbGlzdCBgS1ZNYCwgYEtWTV9TV19QUk9URUNURURfVk1gLCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGluIGBFbmFibGVDb25maWdzYCAob3IgYEtWTV9BTURgIG9yIGBLVk1fSU5URUxgIGFzIHdlbGwpLlxuXG5UaGUgcXVlc3Rpb24gb2YgcmVhY2hhYmlsaXR5IGlzIGtleS4gQ2FuIHRoaXMgY29kZSBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIGNhbiB0ZXN0PyBZZXMsIGFic29sdXRlbHkuIFRoZXNlIGlvY3RscyBhcmUgY2FsbGVkIHZpYSBgaW9jdGwoS1ZNX0NSRUFURV9WTSlgIGFuZCBgaW9jdGwoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gVGhlc2UgaW9jdGxzIG1hbmlwdWxhdGUgbWVtb3J5IGF0dHJpYnV0ZXMgdXNpbmcgYGt2bV9tYWluLmNgLlxuXG5Ob3csIGZvciB0aGUgY29kZSBjaGFuZ2VzLiBJIHNlZSBhIG5ldyBsaW1pdCBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggb2YgYG1lbV9hdHRyX2FycmF5YC4gYGt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheWAgaXMgaW5pdGlhbGl6ZWQgaW4gYGt2bV9jcmVhdGVfdm1gLiBBIG5ldyBmdW5jdGlvbiwgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgaXMgaW50cm9kdWNlZCB0byBjb3VudCBlbnRyaWVzIGluIGBtZW1fYXR0cl9hcnJheWAuIFRoaXMgaXMgdXNlZCB0byBlbmZvcmNlIHRoZSBsaW1pdC4gVGhlIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBjb2RlIG5vdyBjaGVja3MgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBUaGUgbG9naWMgdXBkYXRlcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgYWZ0ZXIgdGhlIHBvdGVudGlhbGx5IG11dGF0aW5nIG9wZXJhdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBwb3RlbnRpYWwgaXNzdWVzLiBJbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBgeGFzX2Zvcl9lYWNoYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgeGFycmF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhhc19mb3JfZWFjaGAgd29ya3Mgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgKCBgaW5jbHVkZS9saW51eC94YXJyYXkuaGApLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBpdGVyYXRlcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY3NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzoxNS4xMTUxNjQ1MzJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIyNDA3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSB4YXNfZm9yX2VhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE2LSAqL1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTgxNzojZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTgtXFx0Zm9yIChlbnRyeSA9IHhhc19maW5kKHhhcywgbWF4KTsgZW50cnk7IFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MzU6I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNi1cXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTsgZW50cnk7IFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4NTE6I2RlZmluZSB4YXNfZm9yX2VhY2hfY29uZmxpY3QoeGFzLCBlbnRyeSkgXFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1Mi1cXHR3aGlsZSAoKGVudHJ5ID0geGFzX2ZpbmRfY29uZmxpY3QoeGFzKSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE2Ljc4NzQxMjU1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDk2NzQ3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhBcnJheSBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBhcm91bmQgYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbmNsdWRlL2xpbnV4L3hhcnJheS5oYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lIDE4MTcuIEknbSBzdXJlIEkga25vdyB3aGF0IEknbSBsb29raW5nIGZvciwgYW5kIEknbGwgc2VlIHdoYXQgdGhlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbiByZXZlYWxzLiBNYXliZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIHNvbWUgY3JpdGljYWwgbWFjcm8gbWFuaXB1bGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbmNob3IgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MTkuODg0MTYzNjI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3hhcnJheS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0ICogVGhlIGxvb3AgYm9keSB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGVudHJ5IHByZXNlbnQgaW4gdGhlIHhhcnJheVxcbjE4MTE6XFx0ICogYmV0d2VlbiB0aGUgY3VycmVudCB4YXMgcG9zaXRpb24gYW5kIEBtYXguICBAZW50cnkgd2lsbCBiZSBzZXQgdG9cXG4xODEyOlxcdCAqIHRoZSBlbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgeGFycmF5LiAgSXQgaXMgc2FmZSB0byBkZWxldGUgZW50cmllc1xcbjE4MTM6XFx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXFxuMTgxNDpcXHQgKiBvciB0aGUgeGFfbG9jayB3aGlsZSBpdGVyYXRpbmcuICBJZiB5b3UgbmVlZCB0byBkcm9wIHRoZSBsb2NrLCBjYWxsXFxuMTgxNTpcXHQgKiB4YXNfcGF1c2UoKSBmaXJzdC5cXG4xODE2OlxcdCAqL1xcbjE4MTc6XFx0I2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuMTgxODpcXHRcXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcXFxcbjE4MTk6XFx0XFx0ICAgICBlbnRyeSA9IHhhc19uZXh0X2VudHJ5KHhhcywgbWF4KSlcXG4xODIwOlxcdFxcbjE4MjE6XFx0LyoqXFxuMTgyMjpcXHQgKiB4YXNfZm9yX2VhY2hfbWFya2VkKCkgLSBJdGVyYXRlIG92ZXIgYSByYW5nZSBvZiBhbiBYQXJyYXkuXFxuMTgyMzpcXHQgKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbjE4MjQ6XFx0ICogQGVudHJ5OiBFbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgYXJyYXkuXFxuMTgyNTpcXHQgKiBAbWF4OiBNYXhpbXVtIGluZGV4IHRvIHJldHJpZXZlIGZyb20gYXJyYXkuXFxuMTgyNjpcXHQgKiBAbWFyazogTWFyayB0byBzZWFyY2ggZm9yLlxcbjE4Mjc6XFx0ICpcXG4xODI4OlxcdCAqIFRoZSBsb29wIGJvZHkgd2lsbCBiZSBleGVjdXRlZCBmb3IgZWFjaCBtYXJrZWQgZW50cnkgaW4gdGhlIHhhcnJheVxcbjE4Mjk6XFx0ICogYmV0d2VlbiB0aGUgY3VycmVudCB4YXMgcG9zaXRpb24gYW5kIEBtYXguICBAZW50cnkgd2lsbCBiZSBzZXQgdG9cXG4xODMwOlxcdCAqIHRoZSBlbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgeGFycmF5LiAgSXQgaXMgc2FmZSB0byBkZWxldGUgZW50cmllc1xcbjE4MzE6XFx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXFxuMTgzMjpcXHQgKiBvciB0aGUgeGFfbG9jayB3aGlsZSBpdGVyYXRpbmcuICBJZiB5b3UgbmVlZCB0byBkcm9wIHRoZSBsb2NrLCBjYWxsXFxuMTgzMzpcXHQgKiB4YXNfcGF1c2UoKSBmaXJzdC5cXG4xODM0OlxcdCAqL1xcbjE4MzU6XFx0I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcXFxcbjE4MzY6XFx0XFx0Zm9yIChlbnRyeSA9IHhhc19maW5kX21hcmtlZCh4YXMsIG1heCwgbWFyayk7IGVudHJ5OyBcXFxcXFxuMTgzNzpcXHRcXHQgICAgIGVudHJ5ID0geGFzX25leHRfbWFya2VkKHhhcywgbWF4LCBtYXJrKSlcXG4xODM4OlxcdFxcbjE4Mzk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE5Ljg4NDI5NTgyNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjU0ODY2NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB4YXNfZm9yX2VhY2hgIGRvY3VtZW50YXRpb24gYW5kIGl0J3Mgc2NyZWFtaW5nIGF0IG1lOiBcIkhvbGQgdGhlIFJDVSBsb2NrIG9yIHRoZSB4YV9sb2NrIHdoZW4gaXRlcmF0aW5nIVwiIEZpbmUsIGdvdCBpdC4gQnV0IG5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gcG9wcyB1cDogd2hhdCBsb2NrIGlzICphY3R1YWxseSogYmVpbmcgaGVsZCB3aGVuIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgaXMgY2FsbGVkPyBUaGF0J3MgdGhlIGNydXggb2YgdGhpcy5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIHNlZSBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgdGhlIGN1bHByaXQuIEl0IGdyYWJzIGBtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtgIGFuZCAqdGhlbiogY2FsbHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKGt2bSlgLiBCaW5nbyEgYHNsb3RzX2xvY2tgIGlzIGhlbGQuIE5vdywgaGVyZSdzIHRoZSBraWNrZXIg4oCTIGlzIGByY3VfcmVhZF9sb2NrKClgIGFjdGl2ZSBhdCB0aGF0IHBvaW50PyBOb3BlLiBJcyBgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LnhhX2xvY2tgIGhlbGQ/IE5lZ2F0aXZlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHRocmVhZGluZyBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gSXQncyBhIGNsYXNzaWMgY2FzZSBvZiBhc3N1bWluZyBhIGxvY2sgaXMgaGVsZCB3aGVuIGl0J3Mgbm90LlxuXG5UbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBsZXQncyBxdWlja2x5IGNoZWNrIHdoYXQgbG9jayBga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlc2AgYWN0dWFsbHkgdXNlcywgb3IgbW9yZSBpbXBvcnRhbnRseSwgKmhvbGRzKi4gVGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIGFuZCBtYXkgc2hlZCBzb21lIGxpZ2h0LCBidXQgbXkgZ3V0IHRlbGxzIG1lIHdlJ3ZlIGZvdW5kIGEgdnVsbmVyYWJpbGl0eS4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk3NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI0LjEzOTE2NjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NDU6XFx0ICovXFxuMjQ0NjpcXHRib29sIGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbjI0NDc6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuMjQ0ODpcXHR7XFxuMjQ0OTpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBzdGFydCk7XFxuMjQ1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbjI0NTE6XFx0XFx0dm9pZCAqZW50cnk7XFxuMjQ1MjpcXHRcXG4yNDUzOlxcdFxcdG1hc2sgXFx1MDAyNj0ga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pO1xcbjI0NTQ6XFx0XFx0aWYgKGF0dHJzIFxcdTAwMjYgfm1hc2spXFxuMjQ1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ1NjpcXHRcXG4yNDU3OlxcdFxcdGlmIChlbmQgPT0gc3RhcnQgKyAxKVxcbjI0NTg6XFx0XFx0XFx0cmV0dXJuIChrdm1fZ2V0X21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQpIFxcdTAwMjYgbWFzaykgPT0gYXR0cnM7XFxuMjQ1OTpcXHRcXG4yNDYwOlxcdFxcdGd1YXJkKHJjdSkoKTtcXG4yNDYxOlxcdFxcdGlmICghYXR0cnMpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm4gIXhhc19maW5kKFxcdTAwMjZ4YXMsIGVuZCAtIDEpO1xcbjI0NjM6XFx0XFxuMjQ2NDpcXHRcXHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFxcdTAwM2MgZW5kOyBpbmRleCsrKSB7XFxuMjQ2NTpcXHRcXHRcXHRkbyB7XFxuMjQ2NjpcXHRcXHRcXHRcXHRlbnRyeSA9IHhhc19uZXh0KFxcdTAwMjZ4YXMpO1xcbjI0Njc6XFx0XFx0XFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuMjQ2ODpcXHRcXG4yNDY5OlxcdFxcdFxcdGlmICh4YXMueGFfaW5kZXggIT0gaW5kZXggfHxcXG4yNDcwOlxcdFxcdFxcdCAgICAoeGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgbWFzaykgIT0gYXR0cnMpXFxuMjQ3MTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ3MjpcXHRcXHR9XFxuMjQ3MzpcXHRcXG4yNDc0OlxcdFxcdHJldHVybiB0cnVlO1xcbjI0NzU6XFx0fVxcbjI0NzY6XFx0XFxuMjQ3NzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbjI0Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcXG4yNDc5OlxcdHtcXG4yNDgwOlxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIGdmbl9yYW5nZTtcXG4yNDgxOlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4yNDgzOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdF9pdGVyIGl0ZXI7XFxuMjQ4NDpcXHRcXHRib29sIGZvdW5kX21lbXNsb3QgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjQuMTM5NDM3NzUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4NjI5ODkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBFbnRyeSBDb3VudGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBndWFyZChyY3UpKCk7YCBjYWxsLiBSaWdodCwgYWNjZXNzaW5nIHRob3NlIHhhcnJheSBub2RlcyByZXF1aXJlcyBSQ1Ugb3IgYHhhX2xvY2tgIHByb3RlY3Rpb24uIEdvdCBpdC4gTm93LCBsZXQncyBsb29rIGF0IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AuXG5cbmBgYGNcbnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbntcblx0WEFfU1RBVEUoeGFzLCBcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xuXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcblx0dm9pZCAqZW50cnk7XG5cblx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xuXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcblx0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChlbnRyeSlcblx0XHRcdGNvdW50Kys7XG5cblx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcblx0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvdW50O1xufVxuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyAqaW5zaWRlKiB0aGUgbG9vcCEgVGhhdCBtZWFucyBSQ1UgKmNhbm5vdCogYmUgaGVsZCwgcmlnaHQ/IFlvdSBjYW4ndCBzbGVlcCB3aGlsZSBob2xkaW5nIFJDVSEgQW5kIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGB4YV9sb2NrYCBpcyBoZWxkIGVpdGhlci4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBTbywgaG93IGRvZXMgYHhhc19maW5kYCBvciBgeGFzX25leHRfZW50cnlgIGJlaGF2ZSB3aGVuICpuZWl0aGVyKiBSQ1Ugbm9yIGB4YV9sb2NrYCBpcyBoZWxkP1xuXG5JIG5lZWQgdG8gZmlndXJlIHRoaXMgb3V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyBub3QgcmFjeS4gRG9lcyBsb2NrZGVwIG9yIENPTkZJR19QUk9WRV9SQ1UgY29tcGxhaW4/IEkgbmVlZCB0byBjaGVjayBob3cgYHhhc19maW5kYCBhbmQgYHhhc19kZXNjZW5kYCBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBsaWIveGFycmF5LmNgLCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIG5vIGV4cGxpY2l0IGxvY2tpbmcgaXMgcHJlc2VudC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgeGFycmF5IG9wZXJhdGlvbnMgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIGluIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjguMDAyNDMwODE0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyY3VfZGVyZWZlcmVuY2VfcmF3Lipub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi94YXJyYXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIveGFycmF5LmM9MjcwPXZvaWQgeGFzX2Rlc3Ryb3koc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtMjc1LVxcdFxcdFhBX05PREVfQlVHX09OKG5vZGUsICFsaXN0X2VtcHR5KFxcdTAwMjZub2RlLVxcdTAwM2Vwcml2YXRlX2xpc3QpKTtcXG5saWIveGFycmF5LmM6Mjc2OlxcdFxcdG5leHQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtXFx1MDAzZXBhcmVudCk7XFxubGliL3hhcnJheS5jLTI3Ny1cXHRcXHRyYWRpeF90cmVlX25vZGVfcmN1X2ZyZWUoXFx1MDAyNm5vZGUtXFx1MDAzZXJjdV9oZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjguMDU1MTM2ODU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDkyMjk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGFycmF5YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGB4YXNfZGVzY2VuZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCByZXNpZGluZyBpbiBgbGliL3hhcnJheS5jYCwgd29ya3MuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSB4YXJyYXkgcHV6emxlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCBpcyBrZXkgdG8gW2luc2VydCB5b3VyIHNwZWNpZmljIHVuZGVyc3RhbmRpbmcgcmVsYXRlZCB0byB5b3VyIGV4cGVydGlzZSBoZXJlIC0gZS5nLiwgb3B0aW1pemluZyBwZXJmb3JtYW5jZSwgZGVidWdnaW5nIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXNzdWUsIHVuZGVyc3RhbmRpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSwgZXRjLl0uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBbbWVudGlvbiB5b3VyIGh5cG90aGVzaXMgaGVyZV0uIFNvIGxldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTA3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI5LjkwNDM3NDQyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMzU1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGFzX2Rlc2NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3hhcnJheS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi94YXJyYXkuYz0xODI9c3RhdGljIHZvaWQgKnhhc19zdGFydChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDMtXFxubGliL3hhcnJheS5jOjIwNDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbmxpYi94YXJyYXkuYy0yMDUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUpXFxuLS1cXG5saWIveGFycmF5LmM9MjM3PXZvaWQgKnhhc19sb2FkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTI0NS1cXHRcXHRcXHRicmVhaztcXG5saWIveGFycmF5LmM6MjQ2OlxcdFxcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcXG5saWIveGFycmF5LmMtMjQ3LVxcdFxcdGlmIChub2RlLVxcdTAwM2VzaGlmdCA9PSAwKVxcbi0tXFxubGliL3hhcnJheS5jPTY0Nz1zdGF0aWMgdm9pZCAqeGFzX2NyZWF0ZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgYm9vbCBhbGxvd19yb290KVxcbi0tXFxubGliL3hhcnJheS5jLTY5NS1cXHRcXHR9XFxubGliL3hhcnJheS5jOjY5NjpcXHRcXHRlbnRyeSA9IHhhc19kZXNjZW5kKHhhcywgbm9kZSk7XFxubGliL3hhcnJheS5jLTY5Ny1cXHRcXHRzbG90ID0gXFx1MDAyNm5vZGUtXFx1MDAzZXNsb3RzW3hhcy1cXHUwMDNleGFfb2Zmc2V0XTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xNTU1PXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTE1NzAtXFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSB4YV90b19ub2RlKGN1cnIpO1xcbmxpYi94YXJyYXkuYzoxNTcxOlxcdFxcdFxcdGN1cnIgPSB4YXNfZGVzY2VuZCh4YXMsIG5vZGUpO1xcbmxpYi94YXJyYXkuYy0xNTcyLVxcdFxcdH1cXG4tLVxcbmxpYi94YXJyYXkuYz0yMTE5PWJvb2wgeGFfZ2V0X21hcmsoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHhhX21hcmtfdCBtYXJrKVxcbi0tXFxubGliL3hhcnJheS5jLTIxMjgtXFx0XFx0XFx0Z290byBmb3VuZDtcXG5saWIveGFycmF5LmM6MjEyOTpcXHRcXHRlbnRyeSA9IHhhc19kZXNjZW5kKFxcdTAwMjZ4YXMsIHhhX3RvX25vZGUoZW50cnkpKTtcXG5saWIveGFycmF5LmMtMjEzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI5Ljk1NDYxNzc2NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5MjQ3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIGB4YXNfZGVzY2VuZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgeGFzX2Rlc2NlbmRgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBiZSBpbiBgbGliL3hhcnJheS5jYCwgc28gSSdsbCBuYXZpZ2F0ZSBvdmVyIHRoZXJlLiBJJ20ga2VlbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBYQXJyYXkgbGlicmFyeSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdXNlZnVsIGFzIHBhcnQgb2YgdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMyLjkyMzg2NzgwM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3hhcnJheS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSBOVUxMO1xcbiAyMDE6XFx0XFx0cmV0dXJuIGVudHJ5O1xcbiAyMDI6XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCBub2RlKTtcXG4gMjA4OlxcdFxcdHZvaWQgKmVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0gbm9kZTtcXG4gMjExOlxcdFxcdHdoaWxlICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xcbiAyMTI6XFx0XFx0XFx0b2Zmc2V0ID0geGFfdG9fc2libGluZyhlbnRyeSk7XFxuIDIxMzpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuIDIxNDpcXHRcXHRcXHRpZiAobm9kZS1cXHUwMDNlc2hpZnQgXFx1MDAyNlxcdTAwMjYgeGFfaXNfbm9kZShlbnRyeSkpXFxuIDIxNTpcXHRcXHRcXHRcXHRlbnRyeSA9IFhBX1JFVFJZX0VOVFJZO1xcbiAyMTY6XFx0XFx0fVxcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IG9mZnNldDtcXG4gMjE5OlxcdFxcdHJldHVybiBlbnRyeTtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0LyoqXFxuIDIyMzpcXHQgKiB4YXNfbG9hZCgpIC0gTG9hZCBhbiBlbnRyeSBmcm9tIHRoZSBYQXJyYXkgKGFkdmFuY2VkKS5cXG4gMjI0OlxcdCAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuIDIyNTpcXHQgKlxcbiAyMjY6XFx0ICogVXN1YWxseSB3YWxrcyB0aGUgQHhhcyB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgdG8gbG9hZCB0aGUgZW50cnlcXG4gMjI3OlxcdCAqIHN0b3JlZCBhdCB4YV9pbmRleC4gIEhvd2V2ZXIsIGl0IHdpbGwgZG8gbm90aGluZyBhbmQgcmV0dXJuICVOVUxMIGlmXFxuIDIyODpcXHQgKiBAeGFzIGlzIGluIGFuIGVycm9yIHN0YXRlLiAgeGFzX2xvYWQoKSB3aWxsIG5ldmVyIGV4cGFuZCB0aGUgdHJlZS5cXG4gMjI5OlxcdCAqXFxuIDIzMDpcXHQgKiBJZiB0aGUgeGFfc3RhdGUgaXMgc2V0IHVwIHRvIG9wZXJhdGUgb24gYSBtdWx0aS1pbmRleCBlbnRyeSwgeGFzX2xvYWQoKVxcbiAyMzE6XFx0ICogbWF5IHJldHVybiAlTlVMTCBvciBhbiBpbnRlcm5hbCBlbnRyeSwgZXZlbiBpZiB0aGVyZSBhcmUgZW50cmllc1xcbiAyMzI6XFx0ICogcHJlc2VudCB3aXRoaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAeGFzLlxcbiAyMzM6XFx0ICpcXG4gMjM0OlxcdCAqIENvbnRleHQ6IEFueSBjb250ZXh0LiAgVGhlIGNhbGxlciBzaG91bGQgaG9sZCB0aGUgeGFfbG9jayBvciB0aGUgUkNVIGxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMyLjkyMzk5NzQyM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTk1MjE0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgeGFfZW50cnlgLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlLiBIZXJlJ3MgbXkgdGFrZTpcblxuKipBbmFseXppbmcgdGhlIGB4YV9lbnRyeWAgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgeGFfZW50cnlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIG9yIGNvZGUgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoaXMgdmFyaWFibGUgbGl2ZXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQncyBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uIGNhbGwsIGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIEknZCBhc3N1bWUgaXQncyBhbiBlbnRyeSBwb2ludCBmb3IgYW4gWEEgdHJhbnNhY3Rpb24uXG5cbkknbSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgWEEgY29uY2VwdHM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBgeGFfc3RhcnRgLCBgeGFfZW5kYCwgYHhhX3ByZXBhcmVgLCBgeGFfY29tbWl0YCwgYHhhX3JvbGxiYWNrYCBmdW5jdGlvbnM/IElmIHNvLCB3aGljaCBvbmUgaXMgdGhpcywgb3IgaXMgdGhpcyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgWEEgcmVzb3VyY2VzPyBJcyB0aGVyZSBhIGRvY3VtZW50YXRpb24gcmVmZXJlbmNlIEkgY2FuIHF1aWNrbHkgY2hlY2ssIG9yIHJlbGF0ZWQgY29kZSB0aGF0IHByb3ZpZGVzIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgYXJlLiBBbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyB0eXBlIHdpbGwgYmUgd3JvbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY29tcG9uZW50cyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLCB0aGUgcmVzb3VyY2UgbWFuYWdlcnMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGllY2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIGNvbnRyb2wgaXMgdml0YWwuIElzIHRoaXMgdmFyaWFibGUgdXNlZCBkaXJlY3RseSBpbiBhIGZ1bmN0aW9uIGNhbGwsIGEgc3RydWN0dXJlLCBvciBpbmRpcmVjdGx5PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgbGlua2VkIHRvIHRoZSB1c2Ugb2YgYHhhX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgYXRvbWljaXR5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nP1xuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYHhhX2VudHJ5YCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHByb2Nlc3MuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIHRoZSByaXNrcywgYW5kIGl0cyBjb25uZWN0aW9uIHRvIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjM4LjkxOTIxNDA0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MzgwOTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHhhX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0MC41NTQ2MDYxN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMwMjg0NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRmluZGluZyB0aGUgYHhhX2VudHJ5YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbG9jYXRlIHRoaXMgYHhhX2VudHJ5YCBxdWlja2x5IGFuZCBlZmZpY2llbnRseS4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIHByb2JhYmx5IGRlcGVuZCBvbiB0aGUgY29udGV4dC4gQW0gSSBkZWFsaW5nIHdpdGggYSBkYXRhYmFzZSBxdWVyeT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IFNvdXJjZSBjb2RlPyBFYWNoIGRlbWFuZHMgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFjdGljLlxuXG5JZiBpdCdzIGNvZGUsIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggdXNpbmcgbXkgSURFJ3MgZnVuY3Rpb25hbGl0eSDigJMgYSBzaW1wbGUgXCJmaW5kIGluIGZpbGVzXCIgb3BlcmF0aW9uIHNob3VsZCBkbyB0aGUgdHJpY2ssIGxldmVyYWdpbmcgd2lsZGNhcmRzIG9yIHJlZ2V4IGlmIG5lY2Vzc2FyeSB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIGluIG5hbWluZyBjb252ZW50aW9ucyAoZS5nLiwgYHhhRW50cnlgLCBgWEFFbnRyeWAsIGB4X2FfZW50cnlgKS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXN1bHRzLCBub3RpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJcyBpdCBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uPyBBIGZ1bmN0aW9uIGNhbGw/IEEgZGF0YSBzdHJ1Y3R1cmUgbWVtYmVyPyBUaGlzIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsLlxuXG5JZiB0aGUgY29udGV4dCBpcyBjb25maWd1cmF0aW9uLCBJJ20gdGhpbmtpbmcgSSdsbCB0cnkgc2VhcmNoaW5nIGluc2lkZSB0aGUgZmlsZS4gSSBtaWdodCB1c2UgdGhlIGZpbGUgc2VhcmNoIHV0aWxpdHksIGRlcGVuZGluZyBvbiBob3cgbGFyZ2UgdGhlIGZpbGVzIGFyZS4gTWF5YmUgaXQncyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBPciBpdCBjb3VsZCBiZSBkZWZpbmVkIGluIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZXMuXG5cbklmIGl0J3MgbW9yZSBjb25jZXB0dWFsLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0IGRvZXMgYW4gXCJYQSBlbnRyeVwiIHR5cGljYWxseSByZXByZXNlbnQ/IElzIGl0IHJlbGF0ZWQgdG8gZGlzdHJpYnV0ZWQgdHJhbnNhY3Rpb25zPyBSZXNvdXJjZSBtYW5hZ2Vycz8gWEEgaW50ZXJmYWNlcz8gVGhpcyBtZW50YWwgZnJhbWV3b3JrIHdpbGwgaGVscCBtZSBuYXJyb3cgZG93biB0aGUgc2VhcmNoIHNwYWNlIGFuZCBhbnRpY2lwYXRlIHdoZXJlIEknbSBsaWtlbHkgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZS4gSSB3aWxsIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBvYmZ1c2NhdGVkLlxuXG5NeSBpbW1lZGlhdGUgZ29hbCBpc24ndCBqdXN0IHRvICpmaW5kKiBpdCwgYnV0IHRvICp1bmRlcnN0YW5kKiBpdC4gT25jZSBJJ3ZlIGxvY2F0ZWQgdGhlIGB4YV9lbnRyeWAsIEknbGwgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtLiBJIG1pZ2h0IGV2ZW4gY3JlYXRlIGEgbm90ZSB0byBjYXB0dXJlIGhvdyBJIGZvdW5kIGl0LCB0byBzdHJlYW1saW5lIGZ1dHVyZSBzZWFyY2hlcy4gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk0NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDMuOTg0ODkzOTM0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk0NzAwODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhX2VudHJ5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC94YXJyYXkuaD0xMjE1PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfaGVhZF9sb2NrZWQoY29uc3Qgc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEyMjEtLyogUHJpdmF0ZSAqL1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTIyMjpzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5KGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMy1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTYxND1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19yZWxvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE2MjMtXFx0XFx0b2Zmc2V0ID0gKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAzZVxcdTAwM2Ugbm9kZS1cXHUwMDNlc2hpZnQpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSztcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE2MjQ6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTYyNS1cXHRcXHRpZiAoIXhhX2lzX3NpYmxpbmcoZW50cnkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMwLVxcdH1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE2MzE6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19uZXh0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMC1cXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTczMTpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0ICsgMSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMyLVxcdFxcdGlmICh1bmxpa2VseSh4YV9pc19pbnRlcm5hbChlbnRyeSkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzc0PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTc4OS1cXHRcXHRyZXR1cm4geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3OTA6XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTc5MS1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODczPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX3ByZXYoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4ODItXFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQtLTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4ODM6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4ODQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xOTAyPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTEtXFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQrKztcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE5MTI6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTMtfVxcbi0tXFxubGliL3hhcnJheS5jPTIwND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxubGliL3hhcnJheS5jLTIwNy1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCBub2RlKTtcXG5saWIveGFycmF5LmM6MjA4OlxcdHZvaWQgKmVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMjA5LVxcbi0tXFxubGliL3hhcnJheS5jLTIxMi1cXHRcXHRvZmZzZXQgPSB4YV90b19zaWJsaW5nKGVudHJ5KTtcXG5saWIveGFycmF5LmM6MjEzOlxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMjE0LVxcdFxcdGlmIChub2RlLVxcdTAwM2VzaGlmdCBcXHUwMDI2XFx1MDAyNiB4YV9pc19ub2RlKGVudHJ5KSlcXG4tLVxcbmxpYi94YXJyYXkuYz0xMjc4PXZvaWQgeGFzX3BhdXNlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTEyODgtXFx0XFx0d2hpbGUgKCsrb2Zmc2V0IFxcdTAwM2MgWEFfQ0hVTktfU0laRSkge1xcbmxpYi94YXJyYXkuYzoxMjg5OlxcdFxcdFxcdGlmICgheGFfaXNfc2libGluZyh4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpKSlcXG5saWIveGFycmF5LmMtMTI5MC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzA5PXZvaWQgKl9feGFzX3ByZXYoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtMTMzMC1cXHRmb3IgKDs7KSB7XFxubGliL3hhcnJheS5jOjEzMzE6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMTMzMi1cXHRcXHRpZiAoIXhhX2lzX25vZGUoZW50cnkpKVxcbi0tXFxubGliL3hhcnJheS5jPTEzNDg9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xMzY5LVxcdGZvciAoOzspIHtcXG5saWIveGFycmF5LmM6MTM3MDpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xMzcxLVxcdFxcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXFxuLS1cXG5saWIveGFycmF5LmM9MTM5Nj12b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuLS1cXG5saWIveGFycmF5LmMtMTQyNS1cXG5saWIveGFycmF5LmM6MTQyNjpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xNDI3LVxcdFxcdGlmICh4YV9pc19ub2RlKGVudHJ5KSkge1xcbi0tXFxubGliL3hhcnJheS5jPTE0NjU9dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxuLS1cXG5saWIveGFycmF5LmMtMTUwNS1cXHRcXHRpZiAoIWFkdmFuY2UpIHtcXG5saWIveGFycmF5LmM6MTUwNjpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xNTA3LVxcdFxcdFxcdGlmICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xcbi0tXFxubGliL3hhcnJheS5jLTE1MjQtXFxubGliL3hhcnJheS5jOjE1MjU6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMTUyNi1cXHRcXHRpZiAoIWVudHJ5IFxcdTAwMjZcXHUwMDI2ICEoeGFfdHJhY2tfZnJlZSh4YXMtXFx1MDAzZXhhKSBcXHUwMDI2XFx1MDAyNiBtYXJrID09IFhBX0ZSRUVfTUFSSykpXFxuLS1cXG5saWIveGFycmF5LmM9MTkyMD1pbnQgeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xOTI2LVxcbmxpYi94YXJyYXkuYzoxOTI3OlxcdFhBX05PREVfQlVHX09OKHhhcy1cXHUwMDNleGFfbm9kZSwgeGFfaXNfc2libGluZyh4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLFxcbmxpYi94YXJyYXkuYy0xOTI4LVxcdFxcdCAgICAgICB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KSkpO1xcbi0tXFxubGliL3hhcnJheS5jLTE5MzMtXFx0XFx0XFx0YnJlYWs7XFxubGliL3hhcnJheS5jOjE5MzQ6XFx0XFx0aWYgKCF4YV9pc19zaWJsaW5nKHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgc2xvdCkpKVxcbmxpYi94YXJyYXkuYy0xOTM1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0Ni4xNzk2MDE2OTZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg1NTYxNzQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSB0aG91Z2h0IHByb2Nlc3MgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0LiBIZXJlIHdlIGdvOlxuXG4qKkFuYWx5emluZyBgeGFfZW50cnlgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQncyBzZWUuLi4gdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gZXhhbWluaW5nIHRoaXMgYHhhX2VudHJ5YC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGxpa2VseSByZXByZXNlbnRzIGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUsIGEgcG9pbnQgb2YgYWNjZXNzLCBvciBhIGtleSBlbGVtZW50IGluIHdoYXRldmVyIHByb2Nlc3Mgd2UncmUgYW5hbHl6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGVudHMsIGl0cyBwdXJwb3NlLCBhbmQgaXRzIGJlaGF2aW9yLiBJcyBpdCBhIGRhdGFiYXNlIGVudHJ5PyBBIGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQSBoYW5kbGUgdG8gYSByZXNvdXJjZT8gT3IgcGVyaGFwcyBhIHBvaW50ZXI/IEl0cyB0eXBlLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBsZXZlbCBkb3duLiBMZXQncyBzZWUgd2hhdCBmdXJ0aGVyIGluZm9ybWF0aW9uIHRoZXJlIGlzLiBNeSBhbmFseXNpcyBoaW5nZXMgb24gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzICppbnNpZGUqIGB4YV9lbnRyeWAsIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXAgaXMgdG8gZXZlcnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTIwMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NTEuMDM1MjIxODQxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3hhcnJheS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0XFxuMTIyMTpcXHQvKiBQcml2YXRlICovXFxuMTIyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5KGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbjEyMjM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHhhX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuMTIyNDpcXHR7XFxuMTIyNTpcXHRcXHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXFx1MDAzZT0gWEFfQ0hVTktfU0laRSk7XFxuMTIyNjpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG5vZGUtXFx1MDAzZXNsb3RzW29mZnNldF0sXFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnhhLVxcdTAwM2V4YV9sb2NrKSk7XFxuMTIyODpcXHR9XFxuMTIyOTpcXHRcXG4xMjMwOlxcdC8qIFByaXZhdGUgKi9cXG4xMjMxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfZW50cnlfbG9ja2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHhhX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuMTIzMzpcXHR7XFxuMTIzNDpcXHRcXHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXFx1MDAzZT0gWEFfQ0hVTktfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjUxLjAzNTM2MDI5MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk3MjQ5OTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSQ1UgVXNhZ2UgYW5kIFBhdGNoIEZ1enppbmcgUmVhZGluZXNzKipcblxuT2theSwgc28gbG9va2luZyBhdCBsaW5lIDEyMjYsIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlOiBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrYCBpcyBiZWluZyB1c2VkIGluIGB4YV9lbnRyeWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gdXNlcyBgeGFzX2Zvcl9lYWNoYCB3aGljaCBjYWxscyBgeGFfZW50cnlgIHdoaWNoIHRoZW4gY2hlY2tzIGVpdGhlciBgcmN1X3JlYWRfbG9ja19oZWxkKClgIG9yIGBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2eGEtXHUwMDNleGFfbG9jaylgLiAgVGhlIHByb2JsZW0gaXMsIGB4YXNfZm9yX2VhY2hgIGlzICpub3QqIGhvbGRpbmcgZWl0aGVyIG9mIHRob3NlIGxvY2tzIHdoZW4gaXQncyBjYWxsZWQhIEknbSBzZWVpbmcgdGhhdCBgc2xvdHNfbG9ja2AgaXMgaGVsZCwgYnV0IG5vdCB0aGUgbmVlZGVkIGB4YV9sb2NrYC4gIFxuXG5XaXRoIGBDT05GSUdfUFJPVkVfUkNVYCBlbmFibGVkLCB0aGlzIGlzIGdvaW5nIHRvIHRyaWdnZXIgYSBgV0FSTklORzogc3VzcGljaW91cyBSQ1UgdXNhZ2VgIG9yIHNwbGF0LCBzcGVjaWZpY2FsbHkgYSBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgd2l0aG91dCBob2xkaW5nIHRoZSBrZXkhYCBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgYnVnIHRoYXQgc3l6a2FsbGVyIG9yIGxvY2tkZXAgd2lsbCBkZXRlY3QgKmltbWVkaWF0ZWx5Ki5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLiBZZXMsIGB4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKWAgY2FsbHMgYHhhc19maW5kYCwgd2hpY2ggKmRvZXMqIGNhbGwgYHhhX2VudHJ5YCwgdHJpZ2dlcmluZyB0aGUgYHJjdV9kZXJlZmVyZW5jZV9jaGVja2AgYW5kIHRoZSBsb2NrZGVwIHdhcm5pbmcuIEJlY2F1c2Ugd2UgYXJlbid0IGhvbGRpbmcgYHJjdV9yZWFkX2xvY2tgIG9yIGBcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkueGFfbG9ja2AsIGJ1dCAqYXJlKiBob2xkaW5nIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AsIHdlJ3JlIGdvaW5nIHRvIGdldCB0aGF0IGxvY2tkZXAgY29tcGxhaW50IVxuXG5UaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyFcblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY3JpdGVyaWEgZm9yIFdvcnRoRnV6emluZzogVHJ1ZSFcbi0gICBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGF0dHJpYnV0ZSBoYW5kbGluZy5cbi0gICBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIChga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgKSwgY2hhbmdlcyBsb2NraW5nIGFzc3VtcHRpb25zLCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MsIGFuZCBleHBvc2VzIHRoZSBzeXN0ZW0gdG8gcG90ZW50aWFsIGJ1Z3MgbGlrZSB0aGUgUkNVIGxvY2tkZXAgdmlvbGF0aW9uIEkgZm91bmQsIGFuZCBwb3NzaWJseSBpbmZpbml0ZSBsb29wcyB2aWEgYHhhX2lzX3JldHJ5YCwgYW5kIGFsc28gcGVyZm9ybWFuY2UgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBgRm9jdXNTeW1ib2xzYCB0byBtYXhpbWl6ZSBmdXp6aW5nIGVmZmljaWVuY3kuICBUaGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGFkZGVkIGFyZSB0aGUga2V5IGVudHJ5cG9pbnRzIGhlcmU6XG4tICAgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYFxuLSAgIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYFxuLSAgIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYFxuXG5ga3ZtX2NyZWF0ZV92bWAgaXMgYSBob3QgcGF0aCBidXQgdG9vIHViaXF1aXRvdXM7IGl0J3MgY2FsbGVkIGluIG5lYXJseSBldmVyeSBLVk0gdGVzdC4gIEhvd2V2ZXIsIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYCBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgbWVtb3J5IGF0dHJpYnV0ZSBmZWF0dXJlLlxuXG5JIGRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBpcyBgc3RhdGljYCwgdGhhdCBpdCB3aWxsIHN0aWxsIGhhdmUgYSBzeW1ib2wgaW4gdGhlIHZtbGludXguICBMZXQncyBkb3VibGUtY2hlY2sgdGhlIHJ1bGVzLiBBaCwgeWVzLCBzdGF0aWMgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKmRvKiBoYXZlIHN5bWJvbHMuIEkgY2FuIGxpc3QgYm90aCB0aGF0IGFuZCBpdHMgY2FsbGVycy5cblxuQ2hlY2tpbmcgY2FsbGVycywgSSBzZWUgdGhhdCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgY2FsbHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gIEFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgdGhlIGRpcmVjdCBpb2N0bCBlbnRyeXBvaW50IHdoaWNoIGNhbGxzIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYC4gIFNvLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AsIGFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgYXJlIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3cgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcmVsZXZhbnQgY29kZSBpcyBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFNvLCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWdzIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSXQncyBzZWxlY3RlZCBieSBzZXZlcmFsIG90aGVyIGNvbmZpZ3M6XG4tICAgYEtWTWAgKHRoZSBvYnZpb3VzIGZpcnN0IG9uZSEpXG5cbkNoZWNraW5nIGluIGB2aXJ0L2t2bS9LY29uZmlnYCwgaXQncyBjbGVhciBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGlzIGEgYm9vbC5cblxuTm93LCBJJ2xsIGNoZWNrIGFsbCBhcmNoaXRlY3R1cmVzIHRvIHNlZSB3aGF0IHNlbGVjdHMgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSSBmb3VuZDpcbi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWA6IGRlcGVuZHMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLlxuLSAgIGBLVk1fSU5URUxfVERYYDogZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RcblxuIiwiSW5wdXRUb2tlbnMiOjM1NjgzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAyLjAwNzg2NDA2OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzM2OTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNy1cXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM4OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYyOlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MDMuNzYxMjQxOTQyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NDcyNzY1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhlIHRhc2sgb2YgZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSBhbmQgd29yayB3aXRoIHRoaXMgS1ZNIGZlYXR1cmUsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgKGFtZDY0LCBhcyB0aGUgdXNlciBzcGVjaWZpZWQpLiBUaGUga2V5IGhlcmUgaXMgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQuXG5cbk15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzaG93cyB0aGF0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCAqb25seSogd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gVG8gZW5hYmxlIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgSSBuZWVkIHRvIGVuYWJsZTogYEtWTWAsIGBLVk1fSU5URUxgICpvciogYEtWTV9BTURgICh3aGljaCBpbXBsaWVzIGBLVk1fWDg2YCksIGBFWFBFUlRgLCBhbmQgb2YgY291cnNlLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXRzZWxmLCBhbmQgYWxzbyBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLlxuXG5JIHRoZW4gd2VudCB0aHJvdWdoIGEgdGhvcm91Z2ggY2hlY2ssIHZlcmlmeWluZyB0aGUgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGNvbmZpZy4gSSByZWNvbmZpcm1lZDogYFZJUlRVQUxJWkFUSU9OPXlgLCBgS1ZNPXlgIG9yIGBtYCwgYEtWTV9JTlRFTD15YCBvciBgbWAgKG9yIGBLVk1fQU1EYCksIGBFWFBFUlQ9eWAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNPXlgLCBhbmQgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTPXlgLiBJIGFsc28gZG91YmxlLWNoZWNrZWQgYEtWTV9BTURfU0VWPXlgIGFzIGFuIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiwganVzdCBpbiBjYXNlLlxuXG5JIHJldmlzaXRlZCB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODMtOTUsIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgSSBoYWRuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIG1hZGUgc3VyZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBkZXBlbmRlbmN5IGBFWFBFUlRgIGlzIHJlcXVpcmVkLiBJIHJlLXJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb24gYWJvdXQgaWRlbnRpZnlpbmcgRW5hYmxlQ29uZmlncyB0byBtYWtlIHN1cmUgSSBmb2xsb3dlZCB0aGUgZ3VpZGVsaW5lczogaW5zcGVjdGluZyBLY29uZmlnIGZpbGVzLCBjaGVja2luZyAnZGVwZW5kcyBvbicgbGluZXMsIGFuZCBzdHJpcHBpbmcgJ0NPTkZJR18nLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IG9mIEVuYWJsZUNvbmZpZ3MgSSBuZWVkIHRvIHVzZSBpczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgYW5kIGBFWFBFUlRgLiBJIGJlbGlldmUgSSBoYXZlIGlkZW50aWZpZWQgYWxsIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIEZvY3VzU3ltYm9sczogYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucywgSSBjYW4gc3VtbWFyaXplIHRoZSBjcnVjaWFsIHBvaW50OiB0aGUgcGF0Y2ggcGxhY2VzIGEgYm91bmQgb24gbWVtb3J5IGF0dHJpYnV0ZSBlbnRyaWVzIGFuZCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb24sIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHdoaWNoIGhhcyBpc3N1ZXMgYmVjYXVzZSBpdCBpdGVyYXRlcyB0aHJvdWdoIGFuIHhhcnJheSB3aXRob3V0IGhvbGRpbmcgdGhlIG5lY2Vzc2FyeSBsb2Nrcy4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYGlvY3RsKHZtX2ZkLCBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKWAsIGFuZCBpdCBjb3VsZCBsZWFkIHRvIGxvY2tkZXAgd2FybmluZ3MsIGxvY2t1cHMsIGFuZCB0cmF2ZXJzYWwgcHJvYmxlbXMuIFRoaXMgY29kZSBpcyByZWxldmFudCBmb3IgdmlydHVhbGl6YXRpb24gZnV6emluZyBvbiB4ODZfNjQuXG5cbkkgYW0gY29uZmlkZW50IGluIG15IGFuYWx5c2lzIGFuZCB0aGUgcmVzdWx0cy4gSSBhbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNDEsIk91dHB1dFRva2VucyI6MjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjMwODUyMjQ3N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzQ0MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MTIuMzg1Mjc1MTg5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI3OTIyNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjM4NTg2ODUyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYyNzg2Mjg5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLlxuICAqL1xuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXHUwMDNjXHUwMDNjIDMxKSAtIDEpXG4rLypcbisgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpblxuKyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbisgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbisgKi9cbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiArODg0LDcgQEAgc3RydWN0IGt2bSB7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbiBcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XG4rXHR1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtcbiAjZW5kaWZcbiBcdGNoYXIgc3RhdHNfaWRbS1ZNX1NUQVRTX05BTUVfU0laRV07XG4gfTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMTA4ZDQyYzVjMWQ2YS4uMjVjMWZmMGMyYTkzZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMTI3LDcgKzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuK1x0a3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCA9IDA7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuQEAgLTI1NDQsNiArMjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCAwKTtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuK1x0dm9pZCAqZW50cnk7XG4rXG4rXHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7XG4rXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbitcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoZW50cnkpXG4rXHRcdFx0Y291bnQrKztcbitcbitcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4rXHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuK1x0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRlbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7XG5AQCAtMjU3OSw2ICsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuK1x0LypcbitcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXG4rXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXG4rXHQgKi9cbitcdGlmIChhdHRyaWJ1dGVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbitcdFx0ciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbitcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbitcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4rXHQgKi9cbitcdG11dGF0ZWQgPSB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuIFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuQEAgLTI2MDMsNiArMjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbitcdC8qXG4rXHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4rXHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuK1x0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuK1x0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbitcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4rXHQgKi9cbitcdGlmIChtdXRhdGVkKVxuK1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjM4NTg2OTU3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NzkzMDEyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBtZXRpY3Vsb3VzbHkuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgaXMganVzdCBcImFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIE5vdCBtdWNoIHRoZXJlLiBUaGUgZGlmZiBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbmQgdXRpbGl6aW5nIGEgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2l0aGluIEtWTSwgcmVsYXRlZCB0byBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzIChgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCkuIFRoaXMgc2VlbXMgbGlrZSBhIG5ldyBmZWF0dXJlLCBhIG1lY2hhbmlzbSB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IFBoeXNpY2FsIEZyYW1lIE51bWJlcnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZXNlIGNoYW5nZXM6XG5cbiogICBBIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0IGlzIGRlZmluZWQsIGxpa2VseSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZS5cbiogICBgeGFfaW5pdF9mbGFnc2AgaXMgdXNlZCwgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAuIFRoaXMgaXMgY3J1Y2lhbC4gSXQgc3VnZ2VzdHMgdGhhdCBhIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpcyBiZWluZyB1c2VkIHRvIG1hbmFnZSB0aGVzZSBtZW1vcnkgYXR0cmlidXRlcywgYW5kIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBtZWFucyBpdCB3aWxsIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzLiBUaGlzIGlzIHdoZXJlIGBtZW1fYXR0cl9nZm5fY291bnRgIHdpbGwgYmUgdXBkYXRlZCwgcHJlc3VtYWJseSwgYWZ0ZXIgZWFjaCBtZW1vcnkgYXR0cmlidXRlIGlzIHNldC5cbiogICBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGlzIGFkZGVkLiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggdGhlIFhBcnJheSB0byBnZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIG1lbW9yeSBhdHRyaWJ1dGUgZW50cmllcy4gVGhpcyBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHBlcmZvcm1pbmcgYSBjb3VudCBvZiB0aGUgZW50cmllcyBpbiB0aGUgWEFycmF5IGFuZCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgYG1lbV9hdHRyX2dmbl9jb3VudGAgdmFyaWFibGUuXG5cblRoZSBtYWluIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsaW1pdCBjaGVjayBoYXBwZW5zLiBJZiB0aGUgbmV3IGF0dHJpYnV0ZXMsIGFkZGVkIHRvIHRoZSBleGlzdGluZyBjb3VudCwgZXhjZWVkIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgLCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gVGhpcyBpcyB0byBsaW1pdCB0aGUgcG9zc2libGUgbnVtYmVyIG9mIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIHNlZSB0aGUgY29kZSBpcyBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzIHdpbGwgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGlmIHNvLCBpdCByZXR1cm5zIGFuIGVycm9yLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIHRoZSBlbnRyaWVzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdG8gZW5zdXJlIGFuIHVwcGVyIGxpbWl0IGlzbid0IGV4Y2VlZGVkIGlzIGludGVyZXN0aW5nLlxuXG5Ob3csIHRvIGRldGVybWluZSBpZiB0aGlzIG1lcml0cyBhIGZ1enppbmcgc2Vzc2lvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhpcyBpcyBhIGxpbWl0IGNoZWNrLCBpdCdzIGVhc3kgdG8gcmVhY2ggdGhlIGxpbWl0LCBhbmQgaXQgdXNlcyBhbiBYQXJyYXkuXG5cbk15IGludHVpdGlvbiBzYXlzOiAqKlllcywgdGhpcyB3YXJyYW50cyBmdXp6aW5nLioqIFRoZXJlIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgY29kZSB0aGF0IEkgY2FuIGZpbmQgd2l0aCBLTVNBTi4gU3BlY2lmaWNhbGx5LCBYQXJyYXlzIGNhbiBoYXZlIGlzc3VlcyB3aXRoIGNvbmN1cnJlbmN5IG9yIGJvdW5kYXJ5IGNvbmRpdGlvbnMgd2hlbiBtb2RpZmllZC4gVGhpcyBjaGVjayBzZWVtcyBsaWtlIGEgZ3JlYXQgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgdGhleSBhcmUgY291bnRpbmcgYW4gZW50cnkuIEl0IGlzIHBvc3NpYmxlIHRoZSBjaGVjayBpcyBub3QgYWNjdXJhdGUsIGFuZCBtYXkgbm90IGFjdHVhbGx5IHJlamVjdCBldmVyeSB2YWxpZCBlbnRyeS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgaXMgcmVhY2hlZCwgZm9yIGV4YW1wbGUuIFRoZSBjaGVjayBjb3VsZCBiZSBieXBhc3NlZCBpbiBzb21lIHdheS5cblxuSSdtIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXM6XG5cbjEuICAqKkV4Y2VlZCB0aGUgTGltaXQ6KiogVGhlIG1vc3Qgb2J2aW91cyBpcyB0byB0cnkgdG8gZXhjZWVkIHRoZSBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCBsaW1pdCBpbiB2YXJpb3VzIHdheXMuIERvZXMgdGhlIGAtRU5PU1BDYCBlcnJvciBoYW5kbGUgY29ycmVjdGx5P1xuMi4gICoqQ29uY3VycmVuY3k6KiogRXhwbG9pdCBjb25jdXJyZW50IGFjY2VzcyB0byBga3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5YCB3aXRoIG11bHRpcGxlIHRocmVhZHMgb3IgVk1zLiBSYWNlIGNvbmRpdGlvbnMgYXJlIGxpa2VseSB3aGVuIHdvcmtpbmcgd2l0aCBhbiBYQXJyYXkuXG4zLiAgKipCb3VuZGFyeSBDb25kaXRpb25zOioqIENoZWNrIHRoZSBiZWhhdmlvcnMgb24gdGhlIGV4YWN0IGVkZ2VzIG9mIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGFuZCB3aGVuIHNldHRpbmcgYXR0cmlidXRlcyB0byB0aGUgc2FtZSBHRk4uXG40LiAgKipFcnJvciBIYW5kbGluZzoqKiBWZXJpZnkgdGhhdCBhbGwgZXJyb3IgcGF0aHMgYXJlIGhhbmRsZWQgc2FmZWx5LlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBtZW1vcnkgYXR0cmlidXRlIGxvZ2ljLiBJIHdpbGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3Igb3RoZXIgdXNhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MjAuOTY1MTc0OTc4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA5Nzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yNTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjU3NS0vKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyNTc2OnN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxudmlydC9rdm0va3ZtX21haW4uYy0yNTc3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjAyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjYwMzpcXHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjYwNC1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjY2NT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjg5LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjY5MDpcXHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoyMS4wMTUyODM0ODVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4NTAzNzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgQ29yZTogRXhhbWluaW5nIGEgU3BlY2lmaWMgU2VjdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgS1ZNIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIGNodW5rIHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2Ag4oCTIGxpbmVzIDI1NzAgdG8gMjcwMC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgY3JpdGljYWwgZnVuY3Rpb24gb3IgbW9kdWxlLCBnaXZlbiB0aGUgbGVuZ3RoIGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBga3ZtX21haW4uY2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZWl0aGVyIFZNIHNldHVwLCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgZ3Vlc3QtcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50LCBvciBpbnRlcnJ1cHQgaGFuZGxpbmcuIFBlcmhhcHMgaXQncyBhbiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYSBjcnVjaWFsIGV2ZW50IGxvb3AgY29tcG9uZW50LCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIENQVSBmZWF0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UsIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgcHJvZHVjZXMgaW4gdGhlIHdpZGVyIEtWTSBlY29zeXN0ZW0uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgbWFjaGluZSBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoyMy42MDAzMjQ0MjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NzA6XFx0XFx0fVxcbjI1NzE6XFx0XFxuMjU3MjpcXHRcXHRyZXR1cm4gY291bnQ7XFxuMjU3MzpcXHR9XFxuMjU3NDpcXHRcXG4yNTc1OlxcdC8qIFNldCBAYXR0cmlidXRlcyBmb3IgdGhlIGdmbiByYW5nZSBbQHN0YXJ0LCBAZW5kKS4gKi9cXG4yNTc2OlxcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuMjU3NzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcXG4yNTc4OlxcdHtcXG4yNTc5OlxcdFxcdHN0cnVjdCBrdm1fbW11X25vdGlmaWVyX3JhbmdlIHByZV9zZXRfcmFuZ2UgPSB7XFxuMjU4MDpcXHRcXHRcXHQuc3RhcnQgPSBzdGFydCxcXG4yNTgxOlxcdFxcdFxcdC5lbmQgPSBlbmQsXFxuMjU4MjpcXHRcXHRcXHQuYXJnLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLFxcbjI1ODM6XFx0XFx0XFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcXG4yNTg0OlxcdFxcdFxcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX3N0YXJ0LFxcbjI1ODU6XFx0XFx0XFx0LmZsdXNoX29uX3JldCA9IHRydWUsXFxuMjU4NjpcXHRcXHRcXHQubWF5X2Jsb2NrID0gdHJ1ZSxcXG4yNTg3OlxcdFxcdH07XFxuMjU4ODpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcXG4yNTg5OlxcdFxcdFxcdC5zdGFydCA9IHN0YXJ0LFxcbjI1OTA6XFx0XFx0XFx0LmVuZCA9IGVuZCxcXG4yNTkxOlxcdFxcdFxcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXFxuMjU5MjpcXHRcXHRcXHQuaGFuZGxlciA9IGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzLFxcbjI1OTM6XFx0XFx0XFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfZW5kLFxcbjI1OTQ6XFx0XFx0XFx0Lm1heV9ibG9jayA9IHRydWUsXFxuMjU5NTpcXHRcXHR9O1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbjI1OTc6XFx0XFx0dm9pZCAqZW50cnk7XFxuMjU5ODpcXHRcXHRib29sIG11dGF0ZWQgPSBmYWxzZTtcXG4yNTk5OlxcdFxcdGludCByID0gMDtcXG4yNjAwOlxcdFxcbjI2MDE6XFx0XFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xcbjI2MDQ6XFx0XFxuMjYwNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBlbnRpcmUgcmFuZ2UgaGFzIHRoZSBkZXNpcmVkIGF0dHJpYnV0ZXMuICovXFxuMjYwODpcXHRcXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcXG4yNjA5OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjEwOlxcdFxcbjI2MTE6XFx0XFx0LypcXG4yNjEyOlxcdFxcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXFxuMjYxMzpcXHRcXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXFxuMjYxNDpcXHRcXHQgKi9cXG4yNjE1OlxcdFxcdGlmIChhdHRyaWJ1dGVzIFxcdTAwMjZcXHUwMDI2XFxuMjYxNjpcXHRcXHQgICAga3ZtLVxcdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFxcdTAwM2UgS1ZNX01FTV9BVFRSX01BWF9HRk5TKSB7XFxuMjYxNzpcXHRcXHRcXHRyID0gLUVOT1NQQztcXG4yNjE4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjE5OlxcdFxcdH1cXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0LypcXG4yNjIyOlxcdFxcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxcbjI2MjM6XFx0XFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxcbjI2MjQ6XFx0XFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4yNjI1OlxcdFxcdCAqL1xcbjI2MjY6XFx0XFx0bXV0YXRlZCA9IHRydWU7XFxuMjYyNzpcXHRcXG4yNjI4OlxcdFxcdC8qXFxuMjYyOTpcXHRcXHQgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXNcXG4yNjMwOlxcdFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG4yNjMxOlxcdFxcdCAqL1xcbjI2MzI6XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbjI2MzM6XFx0XFx0XFx0ciA9IHhhX3Jlc2VydmUoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMjYzNDpcXHRcXHRcXHRpZiAocilcXG4yNjM1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjM2OlxcdFxcbjI2Mzc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYzODpcXHRcXHR9XFxuMjYzOTpcXHRcXG4yNjQwOlxcdFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xcbjI2NDE6XFx0XFxuMjY0MjpcXHRcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuMjY0MzpcXHRcXHRcXHRyID0geGFfZXJyKHhhX3N0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBpLCBlbnRyeSxcXG4yNjQ0OlxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG4yNjQ1OlxcdFxcdFxcdEtWTV9CVUdfT04ociwga3ZtKTtcXG4yNjQ2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZwb3N0X3NldF9yYW5nZSk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdG91dF91bmxvY2s6XFxuMjY1MjpcXHRcXHQvKlxcbjI2NTM6XFx0XFx0ICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZVxcbjI2NTQ6XFx0XFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4yNjU1OlxcdFxcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcXG4yNjU2OlxcdFxcdCAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlXFxuMjY1NzpcXHRcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbjI2NTg6XFx0XFx0ICovXFxuMjY1OTpcXHRcXHRpZiAobXV0YXRlZClcXG4yNjYwOlxcdFxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4yNjYxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0cmV0dXJuIHI7XFxuMjY2NDpcXHR9XFxuMjY2NTpcXHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbjI2NjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXFxuMjY2NzpcXHR7XFxuMjY2ODpcXHRcXHRnZm5fdCBzdGFydCwgZW5kO1xcbjI2Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjIzLjYwMDcxNjQ0N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDIxMTg4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBwaWVjZSBieSBwaWVjZS4gRmlyc3QsIGl0IHNlZW1zIGxpa2Ugd2UndmUgYWRkZWQgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgR0ZOcyAoR3Vlc3QgRnJhbWUgTnVtYmVycykgdGhhdCBjYW4gaGF2ZSBtYXRlcmlhbGl6ZWQgZW50cmllcyBpbiB0aGUgYG1lbV9hdHRyX2FycmF5YCBwZXIgVk0uIFRoZSB2YWx1ZSBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCBpcyBzZXQgdG8gYDFVTCBcdTAwM2NcdTAwM2MgMjVgLCB3aGljaCB0cmFuc2xhdGVzIHRvLCB3aGF0LCAzMyw1NTQsNDMyIGVudHJpZXM/IFRoYXQgc2VlbXMgcmVhc29uYWJsZSBmb3IgYSBoYXJkZW5pbmcgbWVhc3VyZS5cblxuTmV4dCwgYSBuZXcgZmllbGQsIGBtZW1fYXR0cl9nZm5fY291bnRgIChhbiBgdW5zaWduZWQgbG9uZ2ApLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gLiBJJ20gZ3Vlc3NpbmcgdGhpcyB3aWxsIHRyYWNrIHRoZSBudW1iZXIgb2YgYWN0aXZlIGVudHJpZXMuIFRoaXMgaXMgZ29vZDsgd2UgbmVlZCB0byB0cmFjayB0aGlzIHNvbWVob3cgaWYgd2Ugd2FudCB0byBlbmZvcmNlIHRoZSBsaW1pdC5cblxuVGhlIGBrdm1fY3JlYXRlX3ZtYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgdGhlIGBtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGFsc28gc2V0cyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgdG8gemVyby4gT2theSwgdXNpbmcgYFhBX0ZMQUdTX0FDQ09VTlRgIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgbm93IGJlaW5nIHVzZWQgdG8gdHJhY2sgaG93IG1hbnkgZW50cmllcyBleGlzdCBpbiB0aGUgYXJyYXkgKHByb2JhYmx5IGZvciB0aGUgcHVycG9zZSBvZiBhdm9pZGluZyBhbnkgc29ydCBvZiBvdXQtb2YtbWVtb3J5IGVycm9yKS4gVGhpcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIHdlIGhhdmUgYSBrbm93biBzdGFydGluZyBwb2ludC5cblxuVGhlIG5ldyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGZ1bmN0aW9uIGxvb2tzIGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB4YXJyYXkgdXNpbmcgYHhhc19mb3JfZWFjaGAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyByZXRyaWVzIHdpdGggYHhhc19wYXVzZWAgYW5kIGFwcHJvcHJpYXRlbHkgc2tpcHMgdGhvc2UgZW50cmllcy4gSXQgY291bnRzIHRoZSBudW1iZXIgb2Ygbm9uLU5VTEwgZW50cmllcyBhbmQgcGF1c2VzIGlmIG5lY2Vzc2FyeS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gZ2V0IGFuIGFjY3VyYXRlIGNvdW50IG9mIHRoZSB1c2VkIGVudHJpZXMuXG5cbkZpbmFsbHksIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgd2Ugc2VlIHRoZSBlbmZvcmNlbWVudCBvZiB0aGUgbGltaXQuIFRoZSBwYXRjaCBjaGVja3MgaWYgdGhlIGFkZGl0aW9uIG9mIG5ldyBtZW1vcnkgYXR0cmlidXRlcyB3b3VsZCBleGNlZWQgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBJZiBzbywgaXQgcmV0dXJucyBgLUVOT1NQQ2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlIGFycmF5IGl0IHJlY2FsY3VsYXRlcyB0aGUgY291bnQgdXNpbmcgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBwYXRjaCBzZW5kIGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2U/IE5vLCB0aGF0J3MgZ29vZC5cblxuSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcz8gV2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHRoaXMuIExldCdzIHNlZTogYGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnRgIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGt2bV9jcmVhdGVfdm1gLiBHcmVhdC4gVGhlIGBrdm1gIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBUaGF0J3MgaW1wb3J0YW50LiBUaGlzIG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBmaWVsZHMgaW4gdGhlIHN0cnVjdCBhcmUgemVyby1pbml0aWFsaXplZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGhvdyBga3ZtYCBpcyBhbGxvY2F0ZWQgaW4gYGt2bV9jcmVhdGVfdm1gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBzYWZlIGhlcmUuXG5cbkkgYmVsaWV2ZSB0aGlzIHBhdGNoIGlzIHdlbGwtd3JpdHRlbiBhbmQgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjAyMTkwNzcxN1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MTkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NyZWF0ZV92bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9OTkwPXN0YXRpYyB2b2lkIGt2bV9kZXN0cm95X3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMDA3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTAwODpzdGF0aWMgaW50IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwMDkte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xMTA3PXN0YXRpYyB2b2lkIGt2bV9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uKHZvaWQpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMDk6c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTEwLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE0My1cXHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XFxudmlydC9rdm0va3ZtX21haW4uYzoxMTQ0OlxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTQ1LVxcdCAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMjA3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTIwODpcXHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEyMDktXFx0aWYgKHIpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU1NjQ9c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzYtXFxudmlydC9rdm0va3ZtX21haW4uYzo1NTc3OlxcdGt2bSA9IGt2bV9jcmVhdGVfdm0odHlwZSwgZmRuYW1lKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzgtXFx0aWYgKElTX0VSUihrdm0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjA3MzgzNTYyNloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzIwMTcyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktWTSBWTSBDcmVhdGlvbiBBbGxvY2F0aW9uIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGlzIGNvcmUgc3RhZ2Ugb2YgVk0gaW5pdGlhbGl6YXRpb24uIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBob3cgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgcmVkIGZsYWdz4oCUbWVtb3J5IGxlYWtzLCBpbmVmZmljaWVudCBhbGxvY2F0aW9uIHBhdHRlcm5zLCBvciBwb3RlbnRpYWxseSBleGNlc3NpdmUgcmVzb3VyY2UgY29uc3VtcHRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGluc3RhYmlsaXR5IGRvd24gdGhlIGxpbmUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGFjdHVhbCBjYWxsIGl0c2VsZiwgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IHN1YnNlcXVlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjMxLjM5NDAxMTYwNloiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdHtcXG4xMTExOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XFxuMTExMjpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4xMTEzOlxcdFxcdGludCByLCBpLCBqO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoIWt2bSlcXG4xMTE2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRLVk1fTU1VX0xPQ0tfSU5JVChrdm0pO1xcbjExMTk6XFx0XFx0bW1ncmFiKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4xMTIwOlxcdFxcdGt2bS1cXHUwMDNlbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4xMTIxOlxcdFxcdGt2bV9ldmVudGZkX2luaXQoa3ZtKTtcXG4xMTIyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuMTEyMzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWlycV9sb2NrKTtcXG4xMTI0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMTEyNTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuMTEyNjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xcbjExMjc6XFx0XFx0cmN1d2FpdF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTtcXG4xMTI4OlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNldmNwdV9hcnJheSk7XFxuMTEyOTpcXHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuMTEzMDpcXHRcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4xMTMxOlxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcXG4xMTMyOlxcdCNlbmRpZlxcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2a3ZtLVxcdTAwM2VncGNfbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjMxLjM5NDM3NDU3NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjcwMDk1MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1lbW9yeSBBdHRyaWJ1dGUgTGltaXQgZm9yIEtWTSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgZmluZGluZy5cblxuYGt2bV9hcmNoX2FsbG9jX3ZtKClgIGNsZWFybHkgemVyb2VzIHRoZSBgc3RydWN0IGt2bWAsIGFuZCBzcGVjaWZpY2FsbHkgbGluZSAxMTMxIHplcm9lcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAuIEV4Y2VsbGVudCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTG9va2luZyBhdCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB0aGUgYFhBX1NUQVRFYCBtYWNybyBpbml0aWFsaXplcyB0aGUgYHhhc2Agc3RydWN0dXJlLCBhbmQgYGNvdW50YCBpcyBzZXQgdG8gMC4gU2ltaWxhcmx5LCBgbXV0YXRlZGAgaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBTbywgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBpbmZvIGxlYWtzLlxuXG5UaGUgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBhIHJlc291cmNlIGxpbWl0IGFuZCBoYXJkZW5pbmcgbWVhc3VyZSwgZGVzaWduZWQgdG8gc3RvcCB0aGUgdW5ib3VuZGVkIGdyb3d0aCBvZiB4YXJyYXkgbm9kZSBhbGxvY2F0aW9ucyB3aGVuIGEgdXNlciBjYWxscyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIEFueSBidWdzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGxvZ2ljLWJhc2VkLCByZXNvdXJjZS1tYW5hZ2VtZW50IGlzc3VlcywgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBjb25jdXJyZW5jeSBwcm9ibGVtcyAod2hpY2ggYGxvY2tkZXBgIHNob3VsZCBjYXRjaCksIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiAod2hpY2ggYEtBU0FOYCBpcyBkZXNpZ25lZCB0byBkZXRlY3QpLiBDcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaW52b2x2ZSB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHRlc3Rpbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBpc3N1ZXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjazogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIEtBU0FOIGlzIHRoZXJlIHRvIGhhbmRsZSBPT0IsIFVBRiwgZG91YmxlLWZyZWVzLCBldGMuIFRoaXMgcGF0Y2ggYWRkcyBhbiBlbnRyeSBjb3VudGVyIGFuZCBhIGxpbWl0IGNoZWNrIGZvciB0aGUgS1ZNIG1lbW9yeSBhdHRyaWJ1dGVzIHhhcnJheSAoYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2ApLiBUaGUgYG1lbV9hdHRyX2dmbl9jb3VudGAgY291bnRlciBpcyBpbnRyb2R1Y2VkLCBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgaGVscGVyIGZ1bmN0aW9uIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpYCB3YWxrcyB0aGUgeGFycmF5IGFuZCBjb3VudHMgdGhlIGVudHJpZXMuIEFsbCB0aGUgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgbm8gdXNlci1jb3B5aW5nLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIFllcCwgZXZlcnl0aGluZyBsb29rcyBnb29kLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4NiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDozOC42NjQ0NzI2MjlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 18:59:31 +0000 UTC FinishedAt: 2026-09-11 19:04:40 +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": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SW_PROTECTED_VM", "KVM_GENERIC_MEMORY_ATTRIBUTES", "EXPERT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD", "KVM_SW_PROTECTED_VM", "KVM_GENERIC_MEMORY_ATTRIBUTES", "EXPERT" ], "series_id": "734bda86-476d-49cf-9a5e-335cc5b006c0" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_count_mem_attr_entries", "kvm_vm_set_mem_attributes", "kvm_vm_ioctl_set_mem_attributes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "base_tree": "kvm-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fU1dfUFJPVEVDVEVEX1ZNJiMzNDssCiAgICAmIzM0O0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTJiMzNDssCiAgICAmIzM0O0VYUEVSVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbmluZGV4IDNkZDA0NjA1ZjJlNTUuLmJiMDNkYzIwZDNmOTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuQEAgLTU3Myw2ICYjNDM7NTczLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gICogVGhpcyBudW1iZXIgbXVzdCBiZSBkZXRlcm1pbmVkIG5vdCB0byBleGNlZWQgc3VjaCBsaW1pdHMuXG4gICovXG4gI2RlZmluZSBLVk1fTUVNX01BWF9OUl9QQUdFUyAoKDFVTCBcdTAwM2NcdTAwM2MgMzEpIC0gMSlcbiYjNDM7LypcbiYjNDM7ICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW5cbiYjNDM7ICogbWVtX2F0dHJfYXJyYXkgcGVyIFZNICh+MzAwIE1pQiBvZiB4YV9ub2RlcyBhdCAyXjI1KS4gIFdpdGhvdXQgaXQsXG4mIzQzOyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbiYjNDM7ICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiAmIzQzOzg4NCw3IEBAIHN0cnVjdCBrdm0ge1xuICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbiBcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXG4gXHRzdHJ1Y3QgeGFycmF5IG1lbV9hdHRyX2FycmF5O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50O1xuICNlbmRpZlxuIFx0Y2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTtcbiB9O1xuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXG5pbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NFxuLS0tIGEvdmlydC9rdm0va3ZtX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uY1xuQEAgLTExMjcsNyAmIzQzOzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuJiM0MztcdHhhX2luaXRfZmxhZ3MoXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcbiYjNDM7XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcbiAjZW5kaWZcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG5AQCAtMjU0NCw2ICYjNDM7MjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS5cbiYjNDM7ICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhzdHJ1Y3Qga3ZtICprdm0pXG4mIzQzO3tcbiYjNDM7XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgMCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1xuJiM0MztcdHhhc19mb3JfZWFjaChcdTAwMjZ4YXMsIGVudHJ5LCBVTE9OR19NQVgpIHtcbiYjNDM7XHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbiYjNDM7XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVudHJ5KVxuJiM0MztcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4mIzQzO1x0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXG4gc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxuQEAgLTI1NjcsNiAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuJiM0MztcdGJvb2wgbXV0YXRlZCA9IGZhbHNlO1xuIFx0aW50IHIgPSAwO1xuIFxuIFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xuQEAgLTI1NzksNiAmIzQzOzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbiBcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvblxuJiM0MztcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYXR0cmlidXRlcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbiYjNDM7XHRcdHIgPSAtRU5PU1BDO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbiYjNDM7XHQgKiBjb3VudGVyIG11c3QgYmUgcmVzeW5jaHJvbml6ZWQgb24gdGhlIHdheSBvdXQuICBFYXJseS1vdXRzIGFib3ZlXG4mIzQzO1x0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRhdGVkID0gdHJ1ZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXG4gXHQgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuXG5AQCAtMjYwMyw2ICYjNDM7MjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcbiYjNDM7XHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuJiM0MztcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcbiYjNDM7XHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxuJiM0MztcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG11dGF0ZWQpXG4mIzQzO1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OywKICAgICYjMzQ7S1ZNX1NXX1BST1RFQ1RFRF9WTSYjMzQ7LAogICAgJiMzNDtLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7LAogICAgJiMzNDtFWFBFUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDssCiAgICAmIzM0O2t2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjhjZGE4MmNhODkyMzA5Yjk5OWM3YTY0YTQ2OTc0ZmM0NGI1OTFhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDE5OjAxOjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IDNkZDA0NjA1ZjJlNTUuLmJiMDNkYzIwZDNmOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTU3Myw2ICYjNDM7NTczLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAgKiBUaGlzIG51bWJlciBtdXN0IGJlIGRldGVybWluZWQgbm90IHRvIGV4Y2VlZCBzdWNoIGxpbWl0cy4KICAqLwogI2RlZmluZSBLVk1fTUVNX01BWF9OUl9QQUdFUyAoKDFVTCAmbHQ7Jmx0OyAzMSkgLSAxKQomIzQzOy8qCiYjNDM7ICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4KJiM0MzsgKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCwKJiM0MzsgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGdyb3dzIHRoZSBhcnJheSB3aXRob3V0IGxpbWl0ICh+OS4zIGJ5dGVzIG9mCiYjNDM7ICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMJKDFVTCAmbHQ7Jmx0OyAyNSkKIAogLyoKICAqIFNpbmNlIGF0IGlkbGUgZWFjaCBtZW1zbG90IGJlbG9uZ3MgdG8gdHdvIG1lbXNsb3Qgc2V0cyBpdCBoYXMgdG8gY29udGFpbgpAQCAtODc3LDYgJiM0Mzs4ODQsNyBAQCBzdHJ1Y3Qga3ZtIHsKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMKIAkvKiBQcm90ZWN0ZWQgYnkgc2xvdHNfbG9jayAoZm9yIHdyaXRlcykgYW5kIFJDVSAoZm9yIHJlYWRzKSAqLwogCXN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50OwogI2VuZGlmCiAJY2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTsKIH07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTExMjcsNyAmIzQzOzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSkKIAlyY3V3YWl0X2luaXQoJmFtcDtrdm0tJmd0O21uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTsKIAl4YV9pbml0KCZhbXA7a3ZtLSZndDt2Y3B1X2FycmF5KTsKICNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMKLQl4YV9pbml0KCZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSk7CiYjNDM7CXhhX2luaXRfZmxhZ3MoJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTsKJiM0MzsJa3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnQgPSAwOwogI2VuZGlmCiAKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2t2bS0mZ3Q7Z3BjX2xpc3QpOwpAQCAtMjU0NCw2ICYjNDM7MjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS4KJiM0MzsgKiBTZXJpYWxpemF0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBpcyBwcm92aWRlZCBieSBrdm0tJmd0O3Nsb3RzX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKQomIzQzO3sKJiM0MzsJWEFfU1RBVEUoeGFzLCAmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXksIDApOwomIzQzOwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKJiM0MzsJdm9pZCAqZW50cnk7CiYjNDM7CiYjNDM7CXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZW50cnksIFVMT05HX01BWCkgewomIzQzOwkJaWYgKHhhX2lzX3JldHJ5KGVudHJ5KSkgewomIzQzOwkJCXhhc19wYXVzZSgmYW1wO3hhcyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoZW50cnkpCiYjNDM7CQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiYjNDM7CQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKJiM0MzsJCQljb25kX3Jlc2NoZWQoKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzOwogLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqLwogc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcykKQEAgLTI1NjcsNiAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLAogCX07CiAJdW5zaWduZWQgbG9uZyBpOwogCXZvaWQgKmVudHJ5OwomIzQzOwlib29sIG11dGF0ZWQgPSBmYWxzZTsKIAlpbnQgciA9IDA7CiAKIAllbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7CkBAIC0yNTc5LDYgJiM0MzsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJaWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpCiAJCWdvdG8gb3V0X3VubG9jazsKIAomIzQzOwkvKgomIzQzOwkgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvbgomIzQzOwkgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXR0cmlidXRlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpICZndDsgS1ZNX01FTV9BVFRSX01BWF9HRk5TKSB7CiYjNDM7CQlyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk0KJiM0MzsJICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZQomIzQzOwkgKiBza2lwIHRoZSAocG90ZW50aWFsbHkgZXhwZW5zaXZlKSByZWNvdW50LgomIzQzOwkgKi8KJiM0MzsJbXV0YXRlZCA9IHRydWU7CiYjNDM7CiAJLyoKIAkgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXMKIAkgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuCkBAIC0yNjAzLDYgJiM0MzsyNjQ5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJa3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCAmYW1wO3Bvc3Rfc2V0X3JhbmdlKTsKIAogb3V0X3VubG9jazoKJiM0MzsJLyoKJiM0MzsJICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZQomIzQzOwkgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseQomIzQzOwkgKiByZXNlcnZlZCBHRk5zIGFyZSByZXRhaW5lZCBhbmQgbXVzdCBiZSBjb3VudGVkLCBhbmQgYSBzdWNjZXNzZnVsCiYjNDM7CSAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlCiYjNDM7CSAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuCiYjNDM7CSAqLwomIzQzOwlpZiAobXV0YXRlZCkKJiM0MzsJCWt2bS0mZ3Q7bWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTsKIAltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spOwogCiAJcmV0dXJuIHI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzEKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgS1ZNIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTGludXgga2VybmVsJiMzOTtzIEtWTSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkLiBGcm9tIHRoZSBmaWxlIGxpc3QsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgZm9jdXNlZCBvbiBtZW1vcnkgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5OiBgaW5jbHVkZS9saW51eC9rdm1faG9zdC5oYCBhbmQgYHZpcnQva3ZtL2t2bV9tYWluLmNgLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY29uc3RhbnQsIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgLCBzZXQgdG8gMVVMICZsdDsmbHQ7IDI1LCB3aGljaCBsb29rcyBsaWtlIGEgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIEdsb2JhbCBGcmFtZSBOdW1iZXJzIChHRk5zKSBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IGF0dHJpYnV0ZXMuICBBIG5ldyBgdW5zaWduZWQgbG9uZyBtZW1fYXR0cl9nZm5fY291bnQ7YCBpcyBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gIHdoZW4gYENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgcGF0Y2ggaXMgcmVsYXRlZCB0byBjb3VudGluZyB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMuCgpJbiBga3ZtX2NyZWF0ZV92bSgpYCwgd2Ugc2VlIHRoZSBpbml0aWFsaXphdGlvbiBvZiBga3ZtLSZndDttZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudGAgc2V0IHRvIDAuIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIHVzaW5nIGFuIFhBcnJheSBmb3IgbWFuYWdpbmcgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzLCB3aGVyZSB0aGUgYFhBX0ZMQUdTX0FDQ09VTlRgIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIGFycmF5IHdpbGwga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIG9jY3VwaWVkIGVudHJpZXMuCgpUaGUgcGF0Y2ggaW1wbGVtZW50cyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKWAgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIHRoaXMgWEFycmF5IHRvIGNhbGN1bGF0ZSB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgY291bnQuCgpJbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcygpYCwgYSBjcnVjaWFsIGJvdW5kIGNoZWNrIGlzIGFkZGVkOiBpZiB0aGUgcHJvcG9zZWQgR0ZOIGNvdW50IGV4Y2VlZHMgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gQWxzbywgdGhlcmUgaXMgYSBgbXV0YXRlZCA9IHRydWU7YCBmbGFnIHRvIHNpZ25hbCBhIGNoYW5nZSBpbiBtZW1vcnkgYXR0cmlidXRlcy4gRmluYWxseSwgd2hlbiB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG11dGF0ZWQsIHRoZSBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIGlzIHVwZGF0ZWQgYnkgY2FsbGluZyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKWAuCgpOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLCBob3cgS1ZNIG1lbW9yeSBhdHRyaWJ1dGVzICphY3R1YWxseSogd29yaywgYW5kIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBpdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQuIEkgdGhpbmsgSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSBhbGwgaW5zdGFuY2VzIG9mIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBldmFsdWF0ZSB0aGUgcGF0Y2ggYW5kIGl0cyBpbXBsaWNhdGlvbnMgZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xODQ0PWVudW0ga3ZtX2ludHJfdHlwZSB7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU0LVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoxODU1OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMTg1Ni0jZGVmaW5lIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pICgoa3ZtKS1cdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSlcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9ODA5ND12b2lkIGt2bV9tbXVfcHJlX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODA5OS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6ODEwMDojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTgxMDEtc3RhdGljIGJvb2wgaHVnZXBhZ2VfdGVzdF9taXhlZChzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4sXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMDkzPXN0YXRpYyBpbnQga3ZtX2FsbG9jX21lbXNsb3RfbWV0YWRhdGEoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0Mi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMDE0MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTAxNDQtXHRrdm1fbW11X2luaXRfbWVtc2xvdF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHNsb3QpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD03MjY9c3RhdGljIGlubGluZSBpbnQga3ZtX2FyY2hfdmNwdV9tZW1zbG90c19pZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTczMS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo3MzI6I2lmbmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzMtc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTc3Nz1zdHJ1Y3Qga3ZtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODgzLSNlbmRpZlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjg4NDojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODg1LVx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU2NT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzItXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU3MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3NC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga3ZtX2dldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbilcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU5MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk0LX1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNTk2LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oPTM0Nj1UUkFDRV9FVkVOVChrdm1fZGlydHlfcmluZ19leGl0LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oLTM2MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM2MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zNjItLypcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaD0zNjc9VFJBQ0VfRVZFTlQoa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zODUtKTtcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM4NjojZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaC0zODctXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMDA9Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwMi1cbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMTI4LVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMjk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy0xMTMwLVx0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MTI2Nj1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMzE0LVx0Y2xlYW51cF9zcmN1X3N0cnVjdChcdTAwMjZrdm0tXHUwMDNlc3JjdSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEzMTU6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy0xMzE2LVx0eGFfZGVzdHJveShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQxOT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQzMi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzMzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0MzQtc3RhdGljIHU2NCBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxudmlydC9rdm0va3ZtX21haW4uYzoyNjkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY5My1cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTUwMDgtXHRcdHJldHVybiAxO1xudmlydC9rdm0va3ZtX21haW4uYzo1MDA5OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cdGNhc2UgS1ZNX0NBUF9NRU1PUllfQVRUUklCVVRFUzpcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQxMi0jZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0lSUV9ST1VUSU5HICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xudmlydC9rdm0va3ZtX21haW4uYy01NDE0LVx0Y2FzZSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTOiB7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDIzLVx0fVxudmlydC9rdm0va3ZtX21haW4uYzo1NDI0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQyNS1cdGNhc2UgS1ZNX0NSRUFURV9ERVZJQ0U6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGVyKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIEtWTSBjb3JlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gaXRzIGltcGxlbWVudGF0aW9uIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZXMgMjU0MCB0byAyNjk1LiBUaGF0IHNob3VsZCBiZSB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHRoaXMgc3lzdGVtIGNhbGwgaXMuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTQwOlx0XHQgKiBidXQgaXQmIzM5O3Mgbm90IG9idmlvdXMgdGhhdCBhbGxvd2luZyBuZXcgbWFwcGluZ3Mgd2hpbGUgdGhlIGF0dHJpYnV0ZXNcbjI1NDE6XHRcdCAqIGFyZSBpbiBmbHV4IGlzIGRlc2lyYWJsZSBvciB3b3J0aCB0aGUgY29tcGxleGl0eS5cbjI1NDI6XHRcdCAqL1xuMjU0MzpcdFx0a3ZtX21tdV9pbnZhbGlkYXRlX3JhbmdlX2FkZChrdm0sIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQpO1xuMjU0NDpcdFxuMjU0NTpcdFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XG4yNTQ2Olx0fVxuMjU0NzpcdFxuMjU0ODpcdC8qXG4yNTQ5Olx0ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR0ZOcyB3aXRoIGEgbWF0ZXJpYWxpemVkIGVudHJ5IGluIG1lbV9hdHRyX2FycmF5LlxuMjU1MDpcdCAqIFNlcmlhbGl6YXRpb24gYWdhaW5zdCBtb2RpZmljYXRpb25zIGlzIHByb3ZpZGVkIGJ5IGt2bS1cdTAwM2VzbG90c19sb2NrLlxuMjU1MTpcdCAqL1xuMjU1MjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbjI1NTM6XHR7XG4yNTU0Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgMCk7XG4yNTU1Olx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcbjI1NTY6XHRcdHZvaWQgKmVudHJ5O1xuMjU1NzpcdFxuMjU1ODpcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xuMjU1OTpcdFx0XHRpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7XG4yNTYwOlx0XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4yNTYxOlx0XHRcdFx0Y29udGludWU7XG4yNTYyOlx0XHRcdH1cbjI1NjM6XHRcdFx0aWYgKGVudHJ5KVxuMjU2NDpcdFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbjI1NjU6XHRcbjI1NjY6XHRcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4yNTY3Olx0XHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4yNTY4Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNTY5Olx0XHRcdH1cbjI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdHJldHVybiBjb3VudDtcbjI1NzM6XHR9XG4yNTc0Olx0XG4yNTc1Olx0LyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuMjU3NjpcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNTc3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbjI1Nzg6XHR7XG4yNTc5Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xuMjU4MDpcdFx0XHQuc3RhcnQgPSBzdGFydCxcbjI1ODE6XHRcdFx0LmVuZCA9IGVuZCxcbjI1ODI6XHRcdFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcbjI1ODM6XHRcdFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcbjI1ODQ6XHRcdFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQsXG4yNTg1Olx0XHRcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxuMjU4NjpcdFx0XHQubWF5X2Jsb2NrID0gdHJ1ZSxcbjI1ODc6XHRcdH07XG4yNTg4Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcbjI1ODk6XHRcdFx0LnN0YXJ0ID0gc3RhcnQsXG4yNTkwOlx0XHRcdC5lbmQgPSBlbmQsXG4yNTkxOlx0XHRcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXG4yNTkyOlx0XHRcdC5oYW5kbGVyID0ga3ZtX2FyY2hfcG9zdF9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXG4yNTkzOlx0XHRcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcbjI1OTQ6XHRcdFx0Lm1heV9ibG9jayA9IHRydWUsXG4yNTk1Olx0XHR9O1xuMjU5NjpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMjU5NzpcdFx0dm9pZCAqZW50cnk7XG4yNTk4Olx0XHRib29sIG11dGF0ZWQgPSBmYWxzZTtcbjI1OTk6XHRcdGludCByID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcbjI2MDI6XHRcbjI2MDM6XHRcdHRyYWNlX2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RhcnQsIGVuZCwgYXR0cmlidXRlcyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2MDY6XHRcbjI2MDc6XHRcdC8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIGVudGlyZSByYW5nZSBoYXMgdGhlIGRlc2lyZWQgYXR0cmlidXRlcy4gKi9cbjI2MDg6XHRcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuMjYwOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yNjEwOlx0XG4yNjExOlx0XHQvKlxuMjYxMjpcdFx0ICogQm91bmQgdGhlIG51bWJlciBvZiBtYXRlcmlhbGl6ZWQgR0ZOcyBwZXIgVk0uICBTZWUgdGhlIGNvbW1lbnQgb25cbjI2MTM6XHRcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbjI2MTQ6XHRcdCAqL1xuMjYxNTpcdFx0aWYgKGF0dHJpYnV0ZXMgXHUwMDI2XHUwMDI2XG4yNjE2Olx0XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbjI2MTc6XHRcdFx0ciA9IC1FTk9TUEM7XG4yNjE4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTcyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gTWVtb3J5IEF0dHJpYnV0ZSBTZXR0aW5nIGluIEtWTSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZWFjaGVkIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIHNldCB3aXRoaW4gdGhlIEtWTSB2aXJ0dWFsIG1hY2hpbmUuIE15IGZvY3VzIGlzIG5vdyBvbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdXNlci1wcm92aWRlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IHRoaXMgcmVsYXRlcyB0byBteSBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBUaGlzIHdpbGwgYmUgYW4gaW1wb3J0YW50IHN0ZXAgaW4gbWFwcGluZyBvdXQgaG93IG1lbW9yeSBnZXRzIGhhbmRsZWQgYW5kIHZpcnR1YWxpemVkIGF0IHRoZSBsb3cgbGV2ZWwuIEkmIzM5O2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgSSBnbyB0aHJvdWdoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjYyMDpcdFxuMjYyMTpcdFx0LypcbjI2MjI6XHRcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxuMjYyMzpcdFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxuMjYyNDpcdFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cbjI2MjU6XHRcdCAqL1xuMjYyNjpcdFx0bXV0YXRlZCA9IHRydWU7XG4yNjI3Olx0XG4yNjI4Olx0XHQvKlxuMjYyOTpcdFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXG4yNjMwOlx0XHQgKiBwYXJ0d2F5IHRocm91Z2ggc2V0dGluZyB0aGUgbmV3IGF0dHJpYnV0ZXMuXG4yNjMxOlx0XHQgKi9cbjI2MzI6XHRcdGZvciAoaSA9IHN0YXJ0OyBpIFx1MDAzYyBlbmQ7IGkmIzQzOyYjNDM7KSB7XG4yNjMzOlx0XHRcdHIgPSB4YV9yZXNlcnZlKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgaSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjI2MzQ6XHRcdFx0aWYgKHIpXG4yNjM1Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMjYzNjpcdFxuMjYzNzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjI2Mzg6XHRcdH1cbjI2Mzk6XHRcbjI2NDA6XHRcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXHUwMDI2cHJlX3NldF9yYW5nZSk7XG4yNjQxOlx0XG4yNjQyOlx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpJiM0MzsmIzQzOykge1xuMjY0MzpcdFx0XHRyID0geGFfZXJyKHhhX3N0b3JlKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgaSwgZW50cnksXG4yNjQ0Olx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTF9BQ0NPVU5UKSk7XG4yNjQ1Olx0XHRcdEtWTV9CVUdfT04ociwga3ZtKTtcbjI2NDY6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjQ3Olx0XHR9XG4yNjQ4Olx0XG4yNjQ5Olx0XHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFx1MDAyNnBvc3Rfc2V0X3JhbmdlKTtcbjI2NTA6XHRcbjI2NTE6XHRvdXRfdW5sb2NrOlxuMjY1MjpcdFx0LypcbjI2NTM6XHRcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcbjI2NTQ6XHRcdCAqIGNoYW5nZWQ6IG9uIEVOT01FTSBwYXJ0d2F5IHRocm91Z2ggdGhlIHJlc2VydmUgbG9vcCwgcGFydGlhbGx5XG4yNjU1Olx0XHQgKiByZXNlcnZlZCBHRk5zIGFyZSByZXRhaW5lZCBhbmQgbXVzdCBiZSBjb3VudGVkLCBhbmQgYSBzdWNjZXNzZnVsXG4yNjU2Olx0XHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxuMjY1NzpcdFx0ICogd2FsayBzbyBpZGVtcG90ZW50IHJlcXVlc3RzIHN0YXkgTygxKS5cbjI2NTg6XHRcdCAqL1xuMjY1OTpcdFx0aWYgKG11dGF0ZWQpXG4yNjYwOlx0XHRcdGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgPSBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pO1xuMjY2MTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2NjI6XHRcbjI2NjM6XHRcdHJldHVybiByO1xuMjY2NDpcdH1cbjI2NjU6XHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuMjY2NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzICphdHRycylcbjI2Njc6XHR7XG4yNjY4Olx0XHRnZm5fdCBzdGFydCwgZW5kO1xuMjY2OTpcdFxuMjY3MDpcdFx0LyogZmxhZ3MgaXMgY3VycmVudGx5IG5vdCB1c2VkLiAqL1xuMjY3MTpcdFx0aWYgKGF0dHJzLVx1MDAzZWZsYWdzKVxuMjY3MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NzM6XHRcdGlmIChhdHRycy1cdTAwM2VhdHRyaWJ1dGVzIFx1MDAyNiB+a3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pKVxuMjY3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2NzU6XHRcdGlmIChhdHRycy1cdTAwM2VzaXplID09IDAgfHwgYXR0cnMtXHUwMDNlYWRkcmVzcyAmIzQzOyBhdHRycy1cdTAwM2VzaXplIFx1MDAzYyBhdHRycy1cdTAwM2VhZGRyZXNzKVxuMjY3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjI2Nzc6XHRcdGlmICghUEFHRV9BTElHTkVEKGF0dHJzLVx1MDAzZWFkZHJlc3MpIHx8ICFQQUdFX0FMSUdORUQoYXR0cnMtXHUwMDNlc2l6ZSkpXG4yNjc4Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjY3OTpcdFxuMjY4MDpcdFx0c3RhcnQgPSBhdHRycy1cdTAwM2VhZGRyZXNzIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuMjY4MTpcdFx0ZW5kID0gKGF0dHJzLVx1MDAzZWFkZHJlc3MgJiM0MzsgYXR0cnMtXHUwMDNlc2l6ZSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4yNjgyOlx0XG4yNjgzOlx0XHQvKlxuMjY4NDpcdFx0ICogeGFycmF5IHRyYWNrcyBkYXRhIHVzaW5nIFwmIzM0O3Vuc2lnbmVkIGxvbmdcJiMzNDssIGFuZCBhcyBhIHJlc3VsdCBzbyBkb2VzXG4yNjg1Olx0XHQgKiBLVk0uICBGb3Igc2ltcGxpY2l0eSwgc3VwcG9ydHMgZ2VuZXJpYyBhdHRyaWJ1dGVzIG9ubHkgb24gNjQtYml0XG4yNjg2Olx0XHQgKiBhcmNoaXRlY3R1cmVzLlxuMjY4NzpcdFx0ICovXG4yNjg4Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMpICE9IHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4yNjg5Olx0XG4yNjkwOlx0XHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMpO1xuMjY5MTpcdH1cbjI2OTI6XHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG4yNjkzOlx0XG4yNjk0Olx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXG4yNjk1Olx0e1xuMjY5NjpcdFx0cmV0dXJuIF9fZ2ZuX3RvX21lbXNsb3Qoa3ZtX21lbXNsb3RzKGt2bSksIGdmbik7XG4yNjk3Olx0fVxuMjY5ODpcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChnZm5fdG9fbWVtc2xvdCk7XG4yNjk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29udGV4dCwgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBEZWVwIGludG8gS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGluZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBob3cgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGlzIGludm9rZWQgd2l0aGluIHRoZSBga3ZtX3ZtX2lvY3RsYCBmcmFtZXdvcmsuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgdXAgYW5kIG1hbmFnZWQgZm9yIGEgS1ZNIHZpcnR1YWwgbWFjaGluZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY29udHJvbCBmbG93IHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIHJlcXVlc3RzIGFuZCB0aGUgaHlwZXJ2aXNvciYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4KCkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBvZiB0aGlzIElPQ1RMOiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHRvIG1vZGlmeSBhc3BlY3RzIG9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2Ugc2V0dGluZyBtZW1vcnkgcmVnaW9ucyBhcyBkZXZpY2UgbWVtb3J5LCBtYWtpbmcgaXQgcmVzZXJ2ZWQsIHBlcmhhcHMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUgaHlwZXJ2aXNvciYjMzk7cyBtZW1vcnkgbWFwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2UgdHlwZXMgb2YgSU9DVEwgY2FsbHMgYXJlIHNlbnNpdGl2ZS4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIGlucHV0cyBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXJlIG1ldC4KCk5vdywgZm9jdXNpbmcgb24gdGhlIGBrdm1fdm1faW9jdGxgIHNpZGUgb2YgdGhpbmdzLiBUaGlzIGlzIHdoZXJlIHRoZSBJT0NUTCBjYWxscyBjb21lIGluLiBga3ZtX3ZtX2lvY3RsYCBpcyB0aGUgY2VudHJhbCBkaXNwYXRjaCBmb3IgYWxsIFZNLWxldmVsIGNvbnRyb2wgY29tbWFuZHMuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBnYXRla2VlcGVyLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgdGhlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCByZXF1ZXN0IGlzIHJvdXRlZCBmcm9tIHRoZSBpbml0aWFsIHVzZXIgc3BhY2UgaW52b2NhdGlvbiB0aHJvdWdoIHRoYXQgYGt2bV92bV9pb2N0bGAgc3dpdGNoIHN0YXRlbWVudC4gV2hhdCBhcmUgdGhlIGFyZ3VtZW50IHBhcnNpbmcgYW5kIHZhbGlkYXRpb24gc3RlcHMgYWxvbmcgdGhlIHdheT8gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIGFyZSwgb3IgYXQgbGVhc3Qgd2hlcmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYXJlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBXaGF0IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBib3RoIGluIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZT8gV2hhdCBmaWVsZHMgZG8gdGhleSBjb250YWluPyBIb3cgYXJlIHRoZXNlIHZhbHVlcyBpbnRlcnByZXRlZCBieSB0aGUgS1ZNIGNvcmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGZvcm1hdCBzdHJpbmcgYnVncz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBJLCBmb3IgaW5zdGFuY2UsIHNldCBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24gYXMgZGV2aWNlIG1lbW9yeS4gVGhlIEtWTSBjb3JlIG5lZWRzIHRvIGNvbW11bmljYXRlIHRob3NlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlIE1NVSBhbmQgZGV2aWNlIGVtdWxhdGlvbiBsYXllcnMuCgpJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBpbnRlcm5hbCBsb2NraW5nIG1lY2hhbmlzbXMgdG9vLiBNZW1vcnkgYXR0cmlidXRlcyBsaWtlbHkgdG91Y2ggdmFyaW91cyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLCBzbyB0aGUga2VybmVsIG5lZWRzIHRvIGVuZm9yY2UgY29uY3VycmVuY3kgY29udHJvbCB0byBwcmV2ZW50IGNvcnJ1cHRpb24uIEFyZSBzcGlubG9ja3MsIG11dGV4ZXMsIG9yIFJDVSB1c2VkPyBJZiBzbywgd2hhdCBpcyB0aGUgc2NvcGUgb2YgdGhlc2UgbG9ja3M/IEFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBvciBjb2Fyc2UtZ3JhaW5lZD8gQW55IHBvdGVudGlhbCBmb3IgZGVhZGxvY2tzIG9yIHByaW9yaXR5IGludmVyc2lvbj8gSSBzaG91bGQgYWxzbyBsb29rIGF0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZWxlbWVudHMgb2YgdGhlIGh5cGVydmlzb3IuIEhvdyBkb2VzIHRoaXMgYWZmZWN0IHBhZ2UgdGFibGVzPyBXaGF0IGhhcHBlbnMgd2l0aCBOVU1BIG5vZGVzPwoKRmluYWxseSwgSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgY2FsbCBmYWlscz8gRG9lcyBpdCByZXR1cm4gYSBzcGVjaWZpYyBlcnJvciBjb2RlPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBoYW5kbGVkIGJ5IHVzZXJzcGFjZT8gQXJlIHRoZSBlcnJvcnMgc3VmZmljaWVudGx5IGluZm9ybWF0aXZlPyBBcmUgdGhlcmUgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzPyBXaGF0IGFyZSB0aGUgcmVjb3ZlcnkgcGF0aHMgYWZ0ZXIgYW4gZXJyb3I/IFRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBiZWNhdXNlIG1lbW9yeSBzZXR0aW5nIGlzIGEgdmVyeSBmdW5kYW1lbnRhbCBmdW5jdGlvbi4KCkluIHN1bW1hcnksIG15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNvbnRyb2wgZmxvdywgYXJndW1lbnQgdmFsaWRhdGlvbiwgY29uY3VycmVuY3ksIGFuZCBlcnJvciBoYW5kbGluZyBvZiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgaW5zdGFiaWxpdHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQsIGFuZCBJJiMzOTttIHRyZWF0aW5nIHRoaXMgbGlrZSBhIHJldmVyc2UgZW5naW5lZXJpbmcgcHJvamVjdCBvZiBzb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1NDEwOlx0XHRcdGJyZWFrO1xuNTQxMTpcdFx0fVxuNTQxMjpcdCNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSVJRX1JPVVRJTkcgKi9cbjU0MTM6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG41NDE0Olx0XHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcbjU0MTU6XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyBhdHRycztcbjU0MTY6XHRcbjU0MTc6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NDE4Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZhdHRycywgYXJncCwgc2l6ZW9mKGF0dHJzKSkpXG41NDE5Olx0XHRcdFx0Z290byBvdXQ7XG41NDIwOlx0XG41NDIxOlx0XHRcdHIgPSBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgXHUwMDI2YXR0cnMpO1xuNTQyMjpcdFx0XHRicmVhaztcbjU0MjM6XHRcdH1cbjU0MjQ6XHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXG41NDI1Olx0XHRjYXNlIEtWTV9DUkVBVEVfREVWSUNFOiB7XG41NDI2Olx0XHRcdHN0cnVjdCBrdm1fY3JlYXRlX2RldmljZSBjZDtcbjU0Mjc6XHRcbjU0Mjg6XHRcdFx0ciA9IC1FRkFVTFQ7XG41NDI5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjZCwgYXJncCwgc2l6ZW9mKGNkKSkpXG41NDMwOlx0XHRcdFx0Z290byBvdXQ7XG41NDMxOlx0XG41NDMyOlx0XHRcdHIgPSBrdm1faW9jdGxfY3JlYXRlX2RldmljZShrdm0sIFx1MDAyNmNkKTtcbjU0MzM6XHRcdFx0aWYgKHIpXG41NDM0Olx0XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBNZW1vcnkgQXR0cmlidXRlIFRob3VnaHRzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBrdm1fdm1faW9jdGxgLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gZ2V0IGhlcmU/JiMzNDsgT2YgY291cnNlIHdlIGNhbiEgVGhpcyBpcyBLVk0gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQsIGEgY29yZSBjb21wb25lbnQgb2YgTGludXggdmlydHVhbGl6YXRpb24uIEEgdXNlciBwcm9jZXNzIGhhcyB0byBvcGVuIGAvZGV2L2t2bWAsIGNyZWF0ZSBhIHZpcnR1YWwgbWFjaGluZSB1c2luZyBgaW9jdGwoa3ZtX2ZkLCBLVk1fQ1JFQVRFX1ZNLCAuLi4pYC4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgY2FuIHlvdSBsZWdpdGltYXRlbHkgY2FsbCBgaW9jdGxgIHdpdGggYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgISBHb3QgaXQuCgpOb3csIHRvIGdldCBkb3duIHRvIGRldGFpbHMsIEkgd2FudCB0byBjbGFyaWZ5IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBlbmFibGUgYENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgYW5kLCBmb3IgdGhhdCBtYXR0ZXIsIHdoYXQgaXMgdGhlIGltcGFjdCBvZiBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyB1c2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL0tjb25maWc9MTAwPWNvbmZpZyBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXG4tLVxudmlydC9rdm0vS2NvbmZpZy0xMDItXG52aXJ0L2t2bS9LY29uZmlnOjEwMzpjb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFNlbGVjdGlvbiBvZiBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgZWFybGllciBncmVwIG91dHB1dCBnYXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIHNvIEkga25vdyBpdCYjMzk7cyBiZWluZyBzZWxlY3RlZCBpbiBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoqICAgYEtWTV9TV19QUk9URUNURURfVk1gIG9uIGBLVk1fWDg2YCBhbmQgYFg4Nl82NGAuCiogICBgS1ZNX0lOVEVMX1REWGAgaWYgYElOVEVMX1REWF9IT1NUYCBpcyBlbmFibGVkLgoqICAgYEtWTV9BTURfU0VWYCwgd2hpY2ggc2VlbXMgdG8gYmUgbGlua2VkIHRvIGBBUkNIX0hBU19DQ19QTEFURk9STWAuCgpOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgZ28gYmFjayBpbnRvIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgYW5kIHpvb20gaW4gYXJvdW5kIHRob3NlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRvIGdldCB0aGUgcHJlY2lzZSBkZXBlbmRlbmN5IGNoYWluLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFxuICA4MTpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDgyOlx0XG4gIDgzOlx0Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cbiAgODQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4gIDg1Olx0XHRkZXBlbmRzIG9uIEVYUEVSVFxuICA4NjpcdFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbiAgODc6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuICA4ODpcdFx0aGVscFxuICA4OTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMuICBDdXJyZW50bHksIHNvZnR3YXJlLVxuICA5MDpcdFx0ICBwcm90ZWN0ZWQgVk1zIGFyZSBwdXJlbHkgYSBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyB2ZWhpY2xlIGZvclxuICA5MTpcdFx0ICBLVk1fQ1JFQVRFX0dVRVNUX01FTUZELiAgQXR0ZW1wdGluZyB0byBydW4gYSBcJiMzNDtyZWFsXCYjMzQ7IFZNIHdvcmtsb2FkIGFzIGFcbiAgOTI6XHRcdCAgc29mdHdhcmUtcHJvdGVjdGVkIFZNIHdpbGwgZmFpbCBtaXNlcmFibHkuXG4gIDkzOlx0XG4gIDk0Olx0XHQgIElmIHVuc3VyZSwgc2F5IFwmIzM0O05cJiMzNDsuXG4gIDk1Olx0XG4gIDk2Olx0Y29uZmlnIEtWTV9JTlRFTFxuICA5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBJbnRlbCAoYW5kIGNvbXBhdGlibGUpIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuICA5ODpcdFx0ZGVwZW5kcyBvbiBLVk0gXHUwMDI2XHUwMDI2IElBMzJfRkVBVF9DVExcbiAgOTk6XHRcdHNlbGVjdCBYODZfRlJFRCBpZiBYODZfNjRcbiAxMDA6XHRcdGhlbHBcbiAxMDE6XHRcdCAgUHJvdmlkZXMgc3VwcG9ydCBmb3IgS1ZNIG9uIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCBJbnRlbCYjMzk7cyBWVFxuIDEwMjpcdFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXG4gMTAzOlx0XG4gMTA0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDEwNTpcdFx0ICB3aWxsIGJlIGNhbGxlZCBrdm0taW50ZWwuXG4gMTA2Olx0XG4gMTA3Olx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuIDEwODpcdCAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuIDEwOTpcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXHUwMDI2XHUwMDI2IEVYUEVSVFxuIDExMDpcdCAgICAgICAgaGVscFxuIDExMTpcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0mIzM5O3MgcGFnZSB0YWJsZSBtYW5hZ2VtZW50IGNvZGUgd2lsbCBub3QgaW5jb3JyZWN0bHlcbiAxMTI6XHQgICAgICAgICAgbGV0IGd1ZXN0cyByZWNlaXZlIGEgdmlydHVhbGl6YXRpb24gZXhjZXB0aW9uLiAgVmlydHVhbGl6YXRpb25cbiAxMTM6XHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcbiAxMTQ6XHQgICAgICAgICAgaW4gdGhlIGd1ZXN0LlxuIDExNTpcdFxuIDExNjpcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcbiAxMTc6XHQgICAgICAgICAgdGhhdCB0cmlnZ2VyIEtWTSYjMzk7cyBXQVJOLCBpbiBwYXJ0aWN1bGFyIHdpdGggZXB0YWQ9MCBhbmQvb3IgbmVzdGVkXG4gMTE4Olx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxuIDExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBLY29uZmlnIGZvciBBTUQgU0VWIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXZSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55dGhpbmcuJiMzNDsgTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGUga2VybmVsJiMzOTtzIHN1cHBvcnQgZm9yIEFNRCYjMzk7cyBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHdpdGhpbiB0aGUgS1ZNIGZyYW1ld29yay4gSSBuZWVkIHRvIGNvbXByZWhlbnNpdmVseSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgcmVsYXRlIHRvIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgd2l0aGluIHRoZSBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBkaXZlIGluIHRoZXJlIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgYEtWTV9BTURfU0VWYCBjb25maWcgb3B0aW9uIGhhcyBiZWVuIGNvcnJlY3RseSBlbmFibGVkIG9yIHByb3Blcmx5IGRlZmluZWQuIEFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMgbXVzdCBiZSB0aG9yb3VnaGx5IHJldmlld2VkLiBUaGlzIGRldGFpbGVkIGNoZWNrIHdpbGwgaGVscCBtZSB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBtb3JlIHRlc3Rpbmcgb3IgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRjb25maWcgS1ZNX0FNRFxuIDE0NzpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4gMTQ4Olx0XHRkZXBlbmRzIG9uIEtWTSBcdTAwMjZcdTAwMjYgKENQVV9TVVBfQU1EIHx8IENQVV9TVVBfSFlHT04pXG4gMTQ5Olx0XHRoZWxwXG4gMTUwOlx0XHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBBTUQgcHJvY2Vzc29ycyBlcXVpcHBlZCB3aXRoIHRoZSBBTUQtVlxuIDE1MTpcdFx0ICAoU1ZNKSBleHRlbnNpb25zLlxuIDE1MjpcdFxuIDE1MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAxNTQ6XHRcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cbiAxNTU6XHRcbiAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MTpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTc0Olx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc1Olx0XHRkZWZhdWx0IHlcbiAxNzY6XHRcdGRlcGVuZHMgb24gS1ZNX1g4NlxuIDE3NzpcdFx0aGVscFxuIDE3ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXG4gMTc5Olx0XHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cbiAxODA6XHRcbiAxODE6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxODI6XHRcbiAxODM6XHRjb25maWcgS1ZNX1NNTVxuIDE4NDpcdFx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDMyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgaGFuZGxlcyBtZW1vcnkgYXR0cmlidXRlcyBhbmQgaG93IHRoZXkmIzM5O3JlIHNlbGVjdGVkLiBNeSBpbml0aWFsIG9ic2VydmF0aW9ucyBzaG93IHRoYXQgYm90aCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgYW5kIGBLVk1fQU1EX1NFVmAgYXJlIGNvbmZpZ3VyZWQgdG8gc2VsZWN0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBzdWdnZXN0cyBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIHNlcnZlcyBhcyBhIHNvcnQgb2YgY29tbW9uIGdyb3VuZCBmb3IgZGlmZmVyZW50IHNlY3VyaXR5IG1vZGVscyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgdGVjaG5vbG9naWVzLiBNeSBuZXh0IHRob3VnaHQgaXMgdG8gYnJvYWRlbiB0aGUgc2VhcmNoOyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIG90aGVyIGFyY2hpdGVjdHVyZXMgb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbHNvIHV0aWxpemUgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gVGhlIGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBicm9hZGVyIHBpY3R1cmUgb2Ygd2hpY2ggY29uZmlndXJhdGlvbnMgc2hhcmUgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0LipLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YODZgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBzZWFyY2ggZm9yIGNvbmZpZ3VyYXRpb24gc3ltYm9scyByZWxhdGVkIHRvIEtWTSwgZm9jdXNpbmcgb24gYGNvbmZpZyBLVk1gIGFuZCBgY29uZmlnIEtWTV9YODZgLiBNeSBndWVzcyBpcyB0aGF0IHRoZSBrZXkgZGVwZW5kZW5jaWVzIGFyZSBsYWlkIG91dCB3aXRoaW4gYGFyY2gveDg2L2t2bS9LY29uZmlnYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEtWTSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdHNvdXJjZSBcJiMzNDt2aXJ0L2t2bS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxuICAgOTpcdFx0Ym9vbCBcJiMzNDtWaXJ0dWFsaXphdGlvblwmIzM0O1xuICAxMDpcdFx0ZGVmYXVsdCB5XG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuIG90aGVyXG4gIDEzOlx0XHQgIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxNDpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODk4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEtWTSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoZSBLVk0gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb24geDg2XzY0LCBhbmQgaXQgbG9va3MgbGlrZSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggS1ZNIChzcGVjaWZpY2FsbHkgS1ZNLCBvciBLVk1fSU5URUwvS1ZNX0FNRCksIGFuZCB3ZSBlbmFibGUgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBpdHNlbGYgaGluZ2VzIG9uIGBFWFBFUlRgLCBgS1ZNX1g4NmAsIGFuZCBgWDg2XzY0YCBiZWluZyBpbiBwbGFjZSwgd2UgYWxzbyBnZXQgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBzZWxlY3RlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LiBBbmQgaWYgYEtWTV9BTURgIGlzIGVuYWJsZWQsIHRoZW4gYEtWTV9BTURfU0VWYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgbG9uZyBhcyBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIHByZXNlbnQuIEFuZCBqdXN0IHRvIGJlIGNsZWFyLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXMgY29uZmlndXJlZCB1bmRlciB0aGUgYFZJUlRVQUxJWkFUSU9OYCBtZW51LgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHN5emthbGxlciB0YXJnZXQgS1ZNPyBZZXMsIGl0IGRvZXMhIFRoYXQmIzM5O3MgZXhjZWxsZW50LiBLVk0gaXMgb25lIG9mIHRoZSBtb3N0IGZyZXF1ZW50bHkgZnV6emVkIHN1YnN5c3RlbXMgYnkgc3l6a2FsbGVyLiBJJiMzOTttIHNlZWluZyBpdCB0YXJnZXRpbmcgYC9kZXYva3ZtYCwgYW5kIHZhcmlvdXMgaW9jdGxzIGxpa2UgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBgS1ZNX0NSRUFURV9WTWAsIGFuZCBvdGhlcnMuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBhbmQgZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zIG9yIGtlcm5lbCBjb2RlLCBidXQgSSBiZXQgSSYjMzk7bGwgZW5kIHVwIGxvb2tpbmcgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02Mzg3PWlzICYjMzk7MCYjMzk7IGZvciBhbGwgZ2Zucy4gIFVzZXJzcGFjZSBjYW4gY29udHJvbCB3aGV0aGVyIG1lbW9yeSBpcyBzaGFyZWQvcHJpdmF0ZSBieVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjYzODg6dG9nZ2xpbmcgS1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSB2aWEgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBhcyBuZWVkZWQuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM4OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjM5ND1SZXR1cm5zIC1FSU5WQUwgaWYgY2FsbGVkIG9uIGEgcHJvdGVjdGVkIFZNLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzOTUtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM5Njo0LjE0MSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM5Ny0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MDQtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjQwNTpLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGFsbG93cyB1c2Vyc3BhY2UgdG8gc2V0IG1lbW9yeSBhdHRyaWJ1dGVzIGZvciBhIHJhbmdlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQwNi1vZiBndWVzdCBwaHlzaWNhbCBtZW1vcnkuXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvYW1kLW1lbW9yeS1lbmNyeXB0aW9uLnJzdD01MDU9S1ZNX01FTU9SWV9BVFRSSUJVVEVfUFJJVkFURSBhdHRyaWJ1dGUgc2V0IGluIGFkdmFuY2UuIFNlZSB0aGUgZG9jdW1lbnRhdGlvblxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvYW1kLW1lbW9yeS1lbmNyeXB0aW9uLnJzdDo1MDY6Zm9yIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGFzcGVjdC5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3QtNTA3LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3Q9MTYxPU5vdGUsIGJlZm9yZSBjYWxsaW5nIHRoaXMgc3ViIGNvbW1hbmQsIG1lbW9yeSBhdHRyaWJ1dGUgb2YgdGhlIHJhbmdlXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2Mi1bZ3BhLCBncGEgJiM0MzsgbnJfcGFnZXNdIG5lZWRzIHRvIGJlIHByaXZhdGUuICBVc2Vyc3BhY2UgY2FuIHVzZVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoxNjM6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyB0byBzZXQgdGhlIGF0dHJpYnV0ZS5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2ludGVsLXRkeC5yc3QtMTY0LVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQyMT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2MC1cdCAqICAgMSkgVGhlIGJhY2tpbmcgbWVtc2xvdCBpcyBhIHZhbGlkIHByaXZhdGUgbWVtc2xvdC5cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ2MTpcdCAqICAgMikgVGhlIEdGTiBoYXMgYmVlbiBzZXQgdG8gcHJpdmF0ZSB2aWEgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYyLVx0ICogICAgICBiZWZvcmVoYW5kLlxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2Ny1cdCAqIGZhdWx0cyBpZiB0aGVyZSYjMzk7cyBhIHJhY2UgYmV0d2VlbiBhIGZhdWx0IGFuZCBhbiBhdHRyaWJ1dGUgdXBkYXRlIHZpYVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNDY4Olx0ICogS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUywgYW5kIGEgc2ltaWxhciBhcHByb2FjaCBjb3VsZCBiZSB1dGlsaXplZFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDY5LVx0ICogaGVyZS4gSG93ZXZlciwga3ZtLVx1MDAzZXNsb3RzX2xvY2sgZ3VhcmRzIGFnYWluc3QgYm90aCB0aGlzIGFzIHdlbGwgYXNcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9NTYwPXN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2V4aXRpbmdfZ3Vlc3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU3OC0gKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDo1Nzk6ICogS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBncm93cyB0aGUgYXJyYXkgd2l0aG91dCBsaW1pdCAofjkuMyBieXRlcyBvZlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU4MC0gKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMz1pbnQga3ZtX2FyY2hfZ21lbV9tYWtlX3ByaXZhdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGt2bV9wZm5fdCBwZm4sXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzQtICogaGVsZCBzbyB0aGF0IGNhbGxlci1lbmZvcmNlZCBpbnZhcmlhbnRzIHJlZ2FyZGluZyB0aGUgZXhwZWN0ZWQgbWVtb3J5XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjYzNTogKiBhdHRyaWJ1dGVzIG9mIHRoZSBHUEEgcmFuZ2UgZG8gbm90IHJhY2Ugd2l0aCBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTLlxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzYtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYxOD1zdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ2LS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQ3OiNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ZDIsIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMpXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0OC1cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTYxND1zdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQyLS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjQzOiNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyAgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ZDIsIHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY0NC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oPTQyMT1zdGF0aWMgaW5saW5lIHZvaWQgdm1fc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBncGEsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzEtXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo0MzI6XHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIG92ZXJ3cml0ZXMgX2FsbF8gYXR0cmlidXRlcy4gIFRoZXNlIGZsb3dzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzMy1cdCAqIG5lZWQgc2lnbmlmaWNhbnQgZW5oYW5jZW1lbnRzIHRvIHN1cHBvcnQgbXVsdGlwbGUgYXR0cmlidXRlcy5cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzNy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmg6NDM4Olx0dm1faW9jdGwodm0sIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMsIFx1MDAyNmF0dHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzktfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTIzMj1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01NDEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTQxNDpcdGNhc2UgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUzoge1xudmlydC9rdm0va3ZtX21haW4uYy01NDE1LVx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzIGF0dHJzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBIYXJkZW5pbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBnaXQgY29tbWl0IGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgaGFyZGVuaW5nIGJvdW5kIGZvciBgbWVtX2F0dHJfYXJyYXlgLiBGaXJzdCwgaXQgaW5pdGlhbGl6ZXMgdGhpcyBhcnJheSB3aXRoIGBYQV9GTEFHU19BQ0NPVU5UYCBhdCBWTSBjcmVhdGlvbiBhbmQgYWxzbyBpbml0aWFsaXplcyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uCgpUaGVuLCBpdCBpbXBsZW1lbnRzIGEgbmV3IGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB0byBjb3VudCB0aGUgZW50cmllcyBpbiBgbWVtX2F0dHJfYXJyYXlgLiBJIHNlZSBpdCB1c2VzIGB4YXNfZm9yX2VhY2hgIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgeGFycmF5LiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGl0IGNhbGxzIGB4YXNfcGF1c2VgIHdpdGhpbiB0aGUgYGt2bS0mZ3Q7c2xvdHNfbG9ja2AgY29udGV4dC4gKipUaGF0JiMzOTtzIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4qKiBXZSBuZWVkIHRvIGNhcmVmdWxseSBjb25zaWRlciBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBsb2NrZGVwIHByb2JsZW1zLCBhbnkgYnVncyBsdXJraW5nIGluIHRoZSB4YXJyYXkgdHJhdmVyc2FsIGxvZ2ljLCBvciBldmVuIHBlcmZvcm1hbmNlIGlzc3VlcywgRG9TIHZ1bG5lcmFiaWxpdGllcywgb3IgUkNVLXJlbGF0ZWQgcHJvYmxlbXMgc3RlbW1pbmcgZnJvbSB0aGlzLiBJdCYjMzk7cyBjYWxsaW5nIGB4YXNfZm9yX2VhY2hgICp3aGlsZSBob2xkaW5nKiBhIGxvY2s7IHRoYXQgYWx3YXlzIHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkuCgpGdXJ0aGVyLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayBpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdGhhdCByZXR1cm5zIGAtRU5PU1BDYCBpZiB0aGUgbnVtYmVyIG9mIEdGTlMgZXhjZWVkcyBhIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBUaGlzIG1ha2VzIHNlbnNlIGZvciByZXNvdXJjZSBsaW1pdHMuIFRoZSBgeGFfaW5pdGAgZnVuY3Rpb24gaXMgY2hhbmdlZCB0byBgeGFfaW5pdF9mbGFnc2AgYW5kIGBtZW1fYXR0cl9nZm5fY291bnRgIGlzIHRyYWNrZWQuIEFuZCB0aGlzIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIHVwZGF0aW5nIG1lbW9yeSBhdHRyaWJ1dGVzICp1bmRlciB0aGUgc2FtZSBga3ZtLSZndDtzbG90c19sb2NrYCouCgpUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYmVjYXVzZSB0aGlzIGlzIEtWTSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFjY2Vzc2VkIHZpYSBgaW9jdGwodm1fZmQsIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGFsbCB3b3JrcyBhcyBleHBlY3RlZCB1bmRlciBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBzZXR1cHMuIENhbiB0aGlzIHJ1biBpbiBRRU1VIG9uIGFtZDY0PyBZZXMsIGl0IGxvb2tzIGxpa2UgUUVNVSB3aXRoIGEgZ3Vlc3Qga2VybmVsIGhhdmluZyBgQ09ORklHX0tWTWAsIGFuZCBgQ09ORklHX0tWTV9TV19QUk9URUNURURfVk09eWAgb3IgYENPTkZJR19LVk1fSU5URUw9eWAvYENPTkZJR19LVk1fQU1EPXlgIGlzIHRoZSB1c3VhbCBzZXR1cC4gS1ZNIHRlc3RzIGFuZCBzeXprYWxsZXIgZnV6emluZyBpcyB0eXBpY2FsbHkgZG9uZSB3aXRoaW4gUUVNVSB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLCBzbyB0aGF0IG1ha2VzIHNlbnNlLgoKQnV0IEkmIzM5O20gbm93IGN1cmlvdXM6IGNhbiBLVk0gY3JlYXRlIHRoZXNlIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgd2l0aG91dCByZWx5aW5nIG9uIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uPyBMZXQmIzM5O3MgY2hlY2sgZm9yIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgdG8gYmUgc3VyZSwgb3IgbW9yZSBicm9hZGx5LCBsZXQmIzM5O3Mgc2VhcmNoIGZvciB1c2FnZXMgb2YgYGhhc19wcml2YXRlX21lbWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YODZfU1dfUFJPVEVDVEVEX1ZNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05NTEyPW1lYW5zIHRoZSBWTSB0eXBlIHdpdGggdmFsdWUgQG4gaXMgc3VwcG9ydGVkLiAgUG9zc2libGUgdmFsdWVzIG9mIEBuIGFyZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk1MTQtICAjZGVmaW5lIEtWTV9YODZfREVGQVVMVF9WTVx0MFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk1MTU6ICAjZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXHQxXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUxNi0gICNkZWZpbmUgS1ZNX1g4Nl9TRVZfVk1cdDJcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUyMC1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIxOk5vdGUsIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGlzIGN1cnJlbnRseSBvbmx5IGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIyOkRvIG5vdCB1c2UgS1ZNX1g4Nl9TV19QUk9URUNURURfVk0gZm9yIFwmIzM0O3JlYWxcJiMzNDsgVk1zLCBhbmQgZXNwZWNpYWxseSBub3QgaW5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTIzLXByb2R1Y3Rpb24uICBUaGUgYmVoYXZpb3IgYW5kIGVmZmVjdGl2ZSBBQkkgZm9yIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgaXNcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3MC0jZGVmaW5lIEtWTV9YODZfREVGQVVMVF9WTVx0MFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzE6I2RlZmluZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTVx0MVxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NFVl9WTVx0XHQyXG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz02NTY3PWludCBub2lubGluZSBrdm1fbW11X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBjcjJfb3JfZ3BhLCB1NjQgZXJyb3JfY29kZSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXHQgICAgIShlcnJvcl9jb2RlIFx1MDAyNiBQRkVSUl9SU1ZEX01BU0spIFx1MDAyNlx1MDAyNlxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo2NTg2Olx0ICAgIHZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm1fdHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNjU4Ny1cdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cdTAwM2Vrdm0sIGdwYV90b19nZm4oY3IyX29yX2dwYSkpKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NTgtXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6Mjk1OTpcdGNhc2UgS1ZNX1g4Nl9TV19QUk9URUNURURfVk06XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz02OTk5PWludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX1NXX1BST1RFQ1RFRF9WTSkgXHUwMDI2XHUwMDI2IHRkcF9tbXVfZW5hYmxlZClcbmFyY2gveDg2L2t2bS94ODYuYzo3MTI1Olx0XHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcbmFyY2gveDg2L2t2bS94ODYuYy03MTI2LVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05ODUyLVx0a3ZtLVx1MDAzZWFyY2guaGFzX3ByaXZhdGVfbWVtID1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODUzOlx0XHQodHlwZSA9PSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1NC1cdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXG5hcmNoL3g4Ni9rdm0veDg2LmMtOTg1NS1cdGt2bS1cdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkID1cbmFyY2gveDg2L2t2bS94ODYuYzo5ODU2Olx0XHR0eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSB8fCB0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTctXHRrdm0tXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFx1MDAyNiBrdm1fY2Fwcy5zdXBwb3J0ZWRfcXVpcmtzO1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xuLS1cbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcwLSNkZWZpbmUgS1ZNX1g4Nl9ERUZBVUxUX1ZNXHQwXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oOjk3MTojZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXHQxXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU0VWX1ZNXHRcdDJcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9MjIwPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTIyNS0jaWZkZWYgX194ODZfNjRfX1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNjpcdHRlc3RfcHJlX2ZhdWx0X21lbW9yeShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgZmFsc2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNzpcdHRlc3RfcHJlX2ZhdWx0X21lbW9yeShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgdHJ1ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMjI4LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9MzQ2PXN0YXRpYyB2b2lkIHRlc3RfaW52YWxpZF9tZW1vcnlfcmVnaW9uX2ZsYWdzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNTctI2lmZGVmIF9feDg2XzY0X19cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM6MzU4Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM1OTpcdFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNjAtXHRlbHNlXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz00Njc9c3RhdGljIHZvaWQgdGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjQ3NDpcdHZtID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDgyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODM6XHR2bTIgPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODQtXHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYz01MDM9c3RhdGljIHZvaWQgdGVzdF9hZGRfb3ZlcmxhcHBpbmdfcHJpdmF0ZV9tZW1vcnlfcmVnaW9ucyh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNTEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo1MTE6XHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNjQ0LVx0aWYgKGt2bV9oYXNfY2FwKEtWTV9DQVBfR1VFU1RfTUVNRkQpIFx1MDAyNlx1MDAyNlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo2NDU6XHQgICAgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpKSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0Ni1cdFx0dGVzdF9hZGRfcHJpdmF0ZV9tZW1vcnlfcmVnaW9uKCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM9MzY5PXN0YXRpYyB2b2lkIHRlc3RfbWVtX2NvbnZlcnNpb25zKGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsIHUzMiBucl92Y3B1cyxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0zODYtXHRcdC5tb2RlID0gVk1fTU9ERV9ERUZBVUxULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzg3Olx0XHQudHlwZSA9IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzg4LVx0fTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz00NTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0NTc6XHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jPTQyPWNvbnN0IHN0cnVjdCB2bV9zaGFwZSBwcm90ZWN0ZWRfdm1fc2hhcGUgPSB7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDMtXHQubW9kZSA9IFZNX01PREVfREVGQVVMVCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYzo0NDpcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDUtfTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9MTEzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtMTE0LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYzoxMTU6XHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtMTE2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM9NzY9dm9pZCB0ZXN0X3ZtX3R5cGVzKHZvaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04Ny1cdFx0XHQgICBcJiMzNDtWTSB0eXBlIGlzIEtWTV9YODZfREVGQVVMVF9WTVwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4Olx0aWYgKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg5Olx0XHR0ZXN0X2luaXQyX2ludmFsaWQoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sIFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYzo5MDpcdFx0XHRcdCAgIFwmIzM0O1ZNIHR5cGUgaXMgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy05MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbyBga3ZtX2NyZWF0ZV92bWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaW5pdGlhbGl6ZXMgYGt2bS0mZ3Q7bWVtX2F0dHJfYXJyYXlgLCB3aGljaCBpcyBleHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IHdlIGNhbiBhY3R1YWxseSB1c2UgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLiBUaGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGFwcGxpZWQsIGFuZCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMuIEdvb2QgZmlyc3Qgc3RlcDogSSYjMzk7bGwgaW1tZWRpYXRlbHkgZGlnIGludG8gYGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKWAuIFRoYXQgZnVuY3Rpb24gd2lsbCBkZWZpbml0ZWx5IGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBhbGxvd2FibGUgbWVtb3J5IGF0dHJpYnV0ZXMgYW5kIHBvdGVudGlhbGx5IGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBsaW1pdGF0aW9ucyBvciByZXF1aXJlbWVudHMgZm9yIHRoZSBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgY2FsbC4gSSBuZWVkIHRvIHNlZSB3aGF0IGZhY3RvcnMgaW5mbHVlbmNlIHdoYXQmIzM5O3Mgc3VwcG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yNDE5PXN0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NsZWFyX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0yNDMzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzNDpzdGF0aWMgdTY0IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtKVxudmlydC9rdm0va3ZtX21haW4uYy0yNDM1LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI0NDY9Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTItXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI0NTM6XHRtYXNrIFx1MDAyNj0ga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pO1xudmlydC9rdm0va3ZtX21haW4uYy0yNDU0LVx0aWYgKGF0dHJzIFx1MDAyNiB+bWFzaylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzItXHRcdHJldHVybiAtRUlOVkFMO1xudmlydC9rdm0va3ZtX21haW4uYzoyNjczOlx0aWYgKGF0dHJzLVx1MDAzZWF0dHJpYnV0ZXMgXHUwMDI2IH5rdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDk0OD1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25fZ2VuZXJpYyhzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgYXJnKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cdGNhc2UgS1ZNX0NBUF9NRU1PUllfQVRUUklCVVRFUzpcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTAxMTpcdFx0cmV0dXJuIGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwMTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pYCBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQgdGhlIEtWTSBtb2R1bGUgaXMgZG9pbmcgdG8gZGV0ZXJtaW5lIHN1cHBvcnRlZCBtZW1vcnkgYXR0cmlidXRlcy4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlLiBXaGF0IGh5cGVyY2FsbHMgYXJlIGJlaW5nIG1hZGU/IEFyZSB3ZSByZWx5aW5nIG9uIE1TUnMsIG9yIHBhcnNpbmcgQUNQSSB0YWJsZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IHRvIGFzY2VydGFpbiB0aGUgcGxhdGZvcm0mIzM5O3MgbWVtb3J5IGNhcGFiaWxpdGllcz8KCkkmIzM5O20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgbWVtb3J5IHJlZ2lvbnMuIFVuZGVyc3RhbmRpbmcgaXQgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgS1ZNIGtlcm5lbCBtb2R1bGUgaGFuZGxlcyBOVU1BIG5vZGVzLCBIdWdlUGFnZXMsIG1lbW9yeSBob3RwbHVnLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IG1lbW9yeSBmZWF0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBvZiBhIGhhcmR3YXJlIGZlYXR1cmUgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIG51YW5jZWQgbmVnb3RpYXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgZGlmZmVyZW50IHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBJIGtub3cgZXhpc3RzLiBBbnkgZGVwZW5kZW5jaWVzIG9uIHNwZWNpZmljIENQVSBmZWF0dXJlcyBvciBjaGlwc2V0IGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIEZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gaWYgdGhlIGNoZWNrIGZhaWxzLCBpcyBpdCBncmFjZWZ1bD8gV2hhdCBkb2VzIEtWTSBkbyBpbiB0aGUgZXZlbnQgdGhhdCBtZW1vcnkgYXR0cmlidXRlcyBhcmUgbm90IGF2YWlsYWJsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDMwOlx0fVxuMjQzMTpcdCNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUICovXG4yNDMyOlx0XG4yNDMzOlx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuMjQzNDpcdHN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXG4yNDM1Olx0e1xuMjQzNjpcdFx0aWYgKCFrdm0gfHwga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKGt2bSkpXG4yNDM3Olx0XHRcdHJldHVybiBLVk1fTUVNT1JZX0FUVFJJQlVURV9QUklWQVRFO1xuMjQzODpcdFxuMjQzOTpcdFx0cmV0dXJuIDA7XG4yNDQwOlx0fVxuMjQ0MTpcdFxuMjQ0MjpcdC8qXG4yNDQzOlx0ICogUmV0dXJucyB0cnVlIGlmIF9hbGxfIGdmbnMgaW4gdGhlIHJhbmdlIFtAc3RhcnQsIEBlbmQpIGhhdmUgYXR0cmlidXRlc1xuMjQ0NDpcdCAqIHN1Y2ggdGhhdCB0aGUgYml0cyBpbiBAbWFzayBtYXRjaCBAYXR0cnMuXG4yNDQ1Olx0ICovXG4yNDQ2Olx0Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcbjI0NDc6XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxuMjQ0ODpcdHtcbjI0NDk6XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCBzdGFydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Njc1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBNYW5hZ2VtZW50IGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtWTSBtZW1vcnkgYXR0cmlidXRlIGZlYXR1cmVzIHdvcmssIHBhcnRpY3VsYXJseSB0aGUgc29mdHdhcmUtcHJvdGVjdGVkIFZNcywgYW5kIGhvdyB0byBlZmZlY3RpdmVseSBmdXp6IHRoZSByZWxhdGVkIGNvZGUuCgpGaXJzdCwgdGhlIGNvZGUgY2hlY2tzIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzYCBiYXNlZCBvbiB0aGUgVk0gdHlwZS4gYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCBlbmFibGVzIHByaXZhdGUgbWVtb3J5IGF0dHJpYnV0ZXMuIEV2ZW4gaWYgYXR0cmlidXRlcyBhcmUgY2xlYXJlZCAoc2V0IHRvIDApLCB0aGlzIGlzIGFsbG93ZWQuIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBkb2VzbiYjMzk7dCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIChsaWtlIFNFViBvciBURFgpOyBpdCYjMzk7cyBzb2Z0d2FyZS1iYXNlZCBhbmQgdGVzdC1vcmllbnRlZC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUbyBlbmFibGUgdGhpcywgSSBuZWVkIGBLVk1gIChvciBgS1ZNX0lOVEVMYC9gS1ZNX0FNRGApLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIHdoaWNoIGl0c2VsZiBuZWVkcyBgRVhQRVJUYCwgYEtWTV9YODZgLCBhbmQgYFg4Nl82NGAuIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCAqc2VsZWN0cyogYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gQ3J1Y2lhbGx5LCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGlzICpub3QqIGRpcmVjdGx5IHByb21wdGVkIGluIHRoZSBLY29uZmlnLCBtZWFuaW5nIHNpbXBseSBzZXR0aW5nIGBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVM9eWAgbWlnaHQgKm5vdCogYmUgZW5vdWdoLiBJdCB3aWxsIGJlIGVuYWJsZWQgb25seSBpZiBpdCBpcyBzZWxlY3RlZC4gSSBjYW4gYWxzbyB1c2UgYEtWTV9BTURfU0VWYCAod2hpY2ggZGVwZW5kcyBvbiBgS1ZNX0FNRGAgYW5kIGBYODZfNjRgKSBvciBgS1ZNX0lOVEVMX1REWGAuIEl0IGlzIGJlc3QgaWYgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIHVzZWQsIGFuZCB0aGVuIHRlc3QgdGhlIGdlbmVyaWMgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgbmVlZCB0byBsaXN0IGBLVk1gLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaW4gYEVuYWJsZUNvbmZpZ3NgIChvciBgS1ZNX0FNRGAgb3IgYEtWTV9JTlRFTGAgYXMgd2VsbCkuCgpUaGUgcXVlc3Rpb24gb2YgcmVhY2hhYmlsaXR5IGlzIGtleS4gQ2FuIHRoaXMgY29kZSBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIGNhbiB0ZXN0PyBZZXMsIGFic29sdXRlbHkuIFRoZXNlIGlvY3RscyBhcmUgY2FsbGVkIHZpYSBgaW9jdGwoS1ZNX0NSRUFURV9WTSlgIGFuZCBgaW9jdGwoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gVGhlc2UgaW9jdGxzIG1hbmlwdWxhdGUgbWVtb3J5IGF0dHJpYnV0ZXMgdXNpbmcgYGt2bV9tYWluLmNgLgoKTm93LCBmb3IgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgYSBuZXcgbGltaXQgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoIG9mIGBtZW1fYXR0cl9hcnJheWAuIGBrdm0tJmd0O21lbV9hdHRyX2FycmF5YCBpcyBpbml0aWFsaXplZCBpbiBga3ZtX2NyZWF0ZV92bWAuIEEgbmV3IGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBpcyBpbnRyb2R1Y2VkIHRvIGNvdW50IGVudHJpZXMgaW4gYG1lbV9hdHRyX2FycmF5YC4gVGhpcyBpcyB1c2VkIHRvIGVuZm9yY2UgdGhlIGxpbWl0LiBUaGUgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGNvZGUgbm93IGNoZWNrcyB0aGUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQuIFRoZSBsb2dpYyB1cGRhdGVzIGBrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudGAgYWZ0ZXIgdGhlIHBvdGVudGlhbGx5IG11dGF0aW5nIG9wZXJhdGlvbnMuCgpJIG5lZWQgdG8gZm9jdXMgb24gcG90ZW50aWFsIGlzc3Vlcy4gSW4gYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYHhhc19mb3JfZWFjaGAgaXMgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHhhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB4YXNfZm9yX2VhY2hgIHdvcmtzIHdpdGhpbiB0aGUgTGludXgga2VybmVsICggYGluY2x1ZGUvbGludXgveGFycmF5LmhgKS4gVW5kZXJzdGFuZGluZyBob3cgaXQgaXRlcmF0ZXMgaXMgdml0YWwgdG8gdW5kZXJzdGFuZCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSB4YXNfZm9yX2VhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgxNi0gKi9cbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTgxNzojZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTgtXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MzQtICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MzU6I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNi1cdGZvciAoZW50cnkgPSB4YXNfZmluZF9tYXJrZWQoeGFzLCBtYXgsIG1hcmspOyBlbnRyeTsgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4NTAtICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4NTE6I2RlZmluZSB4YXNfZm9yX2VhY2hfY29uZmxpY3QoeGFzLCBlbnRyeSkgXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1Mi1cdHdoaWxlICgoZW50cnkgPSB4YXNfZmluZF9jb25mbGljdCh4YXMpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBYQXJyYXkgaW1wbGVtZW50YXRpb24sIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgYXJvdW5kIGEgc3BlY2lmaWMgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluY2x1ZGUvbGludXgveGFycmF5LmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgYXJvdW5kIGxpbmUgMTgxNy4gSSYjMzk7bSBzdXJlIEkga25vdyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IsIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgY29kZSBhdCB0aGF0IGxvY2F0aW9uIHJldmVhbHMuIE1heWJlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGEgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgb3Igc29tZSBjcml0aWNhbCBtYWNybyBtYW5pcHVsYXRpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGFuY2hvciBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3hhcnJheS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODEwOlx0ICogVGhlIGxvb3AgYm9keSB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGVudHJ5IHByZXNlbnQgaW4gdGhlIHhhcnJheVxuMTgxMTpcdCAqIGJldHdlZW4gdGhlIGN1cnJlbnQgeGFzIHBvc2l0aW9uIGFuZCBAbWF4LiAgQGVudHJ5IHdpbGwgYmUgc2V0IHRvXG4xODEyOlx0ICogdGhlIGVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSB4YXJyYXkuICBJdCBpcyBzYWZlIHRvIGRlbGV0ZSBlbnRyaWVzXG4xODEzOlx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXG4xODE0Olx0ICogb3IgdGhlIHhhX2xvY2sgd2hpbGUgaXRlcmF0aW5nLiAgSWYgeW91IG5lZWQgdG8gZHJvcCB0aGUgbG9jaywgY2FsbFxuMTgxNTpcdCAqIHhhc19wYXVzZSgpIGZpcnN0LlxuMTgxNjpcdCAqL1xuMTgxNzpcdCNkZWZpbmUgeGFzX2Zvcl9lYWNoKHhhcywgZW50cnksIG1heCkgXFxcbjE4MTg6XHRcdGZvciAoZW50cnkgPSB4YXNfZmluZCh4YXMsIG1heCk7IGVudHJ5OyBcXFxuMTgxOTpcdFx0ICAgICBlbnRyeSA9IHhhc19uZXh0X2VudHJ5KHhhcywgbWF4KSlcbjE4MjA6XHRcbjE4MjE6XHQvKipcbjE4MjI6XHQgKiB4YXNfZm9yX2VhY2hfbWFya2VkKCkgLSBJdGVyYXRlIG92ZXIgYSByYW5nZSBvZiBhbiBYQXJyYXkuXG4xODIzOlx0ICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cbjE4MjQ6XHQgKiBAZW50cnk6IEVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSBhcnJheS5cbjE4MjU6XHQgKiBAbWF4OiBNYXhpbXVtIGluZGV4IHRvIHJldHJpZXZlIGZyb20gYXJyYXkuXG4xODI2Olx0ICogQG1hcms6IE1hcmsgdG8gc2VhcmNoIGZvci5cbjE4Mjc6XHQgKlxuMTgyODpcdCAqIFRoZSBsb29wIGJvZHkgd2lsbCBiZSBleGVjdXRlZCBmb3IgZWFjaCBtYXJrZWQgZW50cnkgaW4gdGhlIHhhcnJheVxuMTgyOTpcdCAqIGJldHdlZW4gdGhlIGN1cnJlbnQgeGFzIHBvc2l0aW9uIGFuZCBAbWF4LiAgQGVudHJ5IHdpbGwgYmUgc2V0IHRvXG4xODMwOlx0ICogdGhlIGVudHJ5IHJldHJpZXZlZCBmcm9tIHRoZSB4YXJyYXkuICBJdCBpcyBzYWZlIHRvIGRlbGV0ZSBlbnRyaWVzXG4xODMxOlx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXG4xODMyOlx0ICogb3IgdGhlIHhhX2xvY2sgd2hpbGUgaXRlcmF0aW5nLiAgSWYgeW91IG5lZWQgdG8gZHJvcCB0aGUgbG9jaywgY2FsbFxuMTgzMzpcdCAqIHhhc19wYXVzZSgpIGZpcnN0LlxuMTgzNDpcdCAqL1xuMTgzNTpcdCNkZWZpbmUgeGFzX2Zvcl9lYWNoX21hcmtlZCh4YXMsIGVudHJ5LCBtYXgsIG1hcmspIFxcXG4xODM2Olx0XHRmb3IgKGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTsgZW50cnk7IFxcXG4xODM3Olx0XHQgICAgIGVudHJ5ID0geGFzX25leHRfbWFya2VkKHhhcywgbWF4LCBtYXJrKSlcbjE4Mzg6XHRcbjE4Mzk6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBMb2NraW5nIElzc3VlcyBpbiBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYHhhc19mb3JfZWFjaGAgZG9jdW1lbnRhdGlvbiBhbmQgaXQmIzM5O3Mgc2NyZWFtaW5nIGF0IG1lOiAmIzM0O0hvbGQgdGhlIFJDVSBsb2NrIG9yIHRoZSB4YV9sb2NrIHdoZW4gaXRlcmF0aW5nISYjMzQ7IEZpbmUsIGdvdCBpdC4gQnV0IG5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gcG9wcyB1cDogd2hhdCBsb2NrIGlzICphY3R1YWxseSogYmVpbmcgaGVsZCB3aGVuIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgaXMgY2FsbGVkPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIHRoaXMuCgpEaWdnaW5nIGZ1cnRoZXIsIEkgc2VlIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBpcyB0aGUgY3VscHJpdC4gSXQgZ3JhYnMgYG11dGV4X2xvY2soJmFtcDtrdm0tJmd0O3Nsb3RzX2xvY2spO2AgYW5kICp0aGVuKiBjYWxscyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKWAuIEJpbmdvISBgc2xvdHNfbG9ja2AgaXMgaGVsZC4gTm93LCBoZXJlJiMzOTtzIHRoZSBraWNrZXIg4oCTIGlzIGByY3VfcmVhZF9sb2NrKClgIGFjdGl2ZSBhdCB0aGF0IHBvaW50PyBOb3BlLiBJcyBgJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5LnhhX2xvY2tgIGhlbGQ/IE5lZ2F0aXZlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHRocmVhZGluZyBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gSXQmIzM5O3MgYSBjbGFzc2ljIGNhc2Ugb2YgYXNzdW1pbmcgYSBsb2NrIGlzIGhlbGQgd2hlbiBpdCYjMzk7cyBub3QuCgpUbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB3aGF0IGxvY2sgYGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXNgIGFjdHVhbGx5IHVzZXMsIG9yIG1vcmUgaW1wb3J0YW50bHksICpob2xkcyouIFRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCBhbmQgbWF5IHNoZWQgc29tZSBsaWdodCwgYnV0IG15IGd1dCB0ZWxscyBtZSB3ZSYjMzk7dmUgZm91bmQgYSB2dWxuZXJhYmlsaXR5LiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ0NTpcdCAqL1xuMjQ0NjpcdGJvb2wga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNDQ3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBhdHRycylcbjI0NDg6XHR7XG4yNDQ5Olx0XHRYQV9TVEFURSh4YXMsIFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgc3RhcnQpO1xuMjQ1MDpcdFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbjI0NTE6XHRcdHZvaWQgKmVudHJ5O1xuMjQ1MjpcdFxuMjQ1MzpcdFx0bWFzayBcdTAwMjY9IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcbjI0NTQ6XHRcdGlmIChhdHRycyBcdTAwMjYgfm1hc2spXG4yNDU1Olx0XHRcdHJldHVybiBmYWxzZTtcbjI0NTY6XHRcbjI0NTc6XHRcdGlmIChlbmQgPT0gc3RhcnQgJiM0MzsgMSlcbjI0NTg6XHRcdFx0cmV0dXJuIChrdm1fZ2V0X21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQpIFx1MDAyNiBtYXNrKSA9PSBhdHRycztcbjI0NTk6XHRcbjI0NjA6XHRcdGd1YXJkKHJjdSkoKTtcbjI0NjE6XHRcdGlmICghYXR0cnMpXG4yNDYyOlx0XHRcdHJldHVybiAheGFzX2ZpbmQoXHUwMDI2eGFzLCBlbmQgLSAxKTtcbjI0NjM6XHRcbjI0NjQ6XHRcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXHUwMDNjIGVuZDsgaW5kZXgmIzQzOyYjNDM7KSB7XG4yNDY1Olx0XHRcdGRvIHtcbjI0NjY6XHRcdFx0XHRlbnRyeSA9IHhhc19uZXh0KFx1MDAyNnhhcyk7XG4yNDY3Olx0XHRcdH0gd2hpbGUgKHhhc19yZXRyeShcdTAwMjZ4YXMsIGVudHJ5KSk7XG4yNDY4Olx0XG4yNDY5Olx0XHRcdGlmICh4YXMueGFfaW5kZXggIT0gaW5kZXggfHxcbjI0NzA6XHRcdFx0ICAgICh4YV90b192YWx1ZShlbnRyeSkgXHUwMDI2IG1hc2spICE9IGF0dHJzKVxuMjQ3MTpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjI0NzI6XHRcdH1cbjI0NzM6XHRcbjI0NzQ6XHRcdHJldHVybiB0cnVlO1xuMjQ3NTpcdH1cbjI0NzY6XHRcbjI0Nzc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxuMjQ3ODpcdFx0XHRcdFx0XHRcdCBzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG4yNDc5Olx0e1xuMjQ4MDpcdFx0c3RydWN0IGt2bV9nZm5fcmFuZ2UgZ2ZuX3JhbmdlO1xuMjQ4MTpcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDtcbjI0ODI6XHRcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzO1xuMjQ4MzpcdFx0c3RydWN0IGt2bV9tZW1zbG90X2l0ZXIgaXRlcjtcbjI0ODQ6XHRcdGJvb2wgZm91bmRfbWVtc2xvdCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDEwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIEtWTSBNZW1vcnkgQXR0cmlidXRlIEVudHJ5IENvdW50aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlc2AgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZ3VhcmQocmN1KSgpO2AgY2FsbC4gUmlnaHQsIGFjY2Vzc2luZyB0aG9zZSB4YXJyYXkgbm9kZXMgcmVxdWlyZXMgUkNVIG9yIGB4YV9sb2NrYCBwcm90ZWN0aW9uLiBHb3QgaXQuIE5vdywgbGV0JiMzOTtzIGxvb2sgYXQgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4KCmBgYGMKc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKQp7CglYQV9TVEFURSh4YXMsICZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSwgMCk7Cgl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsKCXZvaWQgKmVudHJ5OwoKCXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZW50cnksIFVMT05HX01BWCkgewoJCWlmICh4YV9pc19yZXRyeShlbnRyeSkpIHsKCQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKCQkJY29udGludWU7CgkJfQoJCWlmIChlbnRyeSkKCQkJY291bnQmIzQzOyYjNDM7OwoKCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKCQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKCQkJY29uZF9yZXNjaGVkKCk7CgkJfQoJfQoKCXJldHVybiBjb3VudDsKfQpgYGAKCldhaXQgYSBzZWNvbmQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyAqaW5zaWRlKiB0aGUgbG9vcCEgVGhhdCBtZWFucyBSQ1UgKmNhbm5vdCogYmUgaGVsZCwgcmlnaHQ/IFlvdSBjYW4mIzM5O3Qgc2xlZXAgd2hpbGUgaG9sZGluZyBSQ1UhIEFuZCBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgYHhhX2xvY2tgIGlzIGhlbGQgZWl0aGVyLiBUaGF0JiMzOTtzLi4uIGludGVyZXN0aW5nLiBTbywgaG93IGRvZXMgYHhhc19maW5kYCBvciBgeGFzX25leHRfZW50cnlgIGJlaGF2ZSB3aGVuICpuZWl0aGVyKiBSQ1Ugbm9yIGB4YV9sb2NrYCBpcyBoZWxkPwoKSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgbm90IHJhY3kuIERvZXMgbG9ja2RlcCBvciBDT05GSUdfUFJPVkVfUkNVIGNvbXBsYWluPyBJIG5lZWQgdG8gY2hlY2sgaG93IGB4YXNfZmluZGAgYW5kIGB4YXNfZGVzY2VuZGAgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgbGliL3hhcnJheS5jYCwgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kIHdoZW4gbm8gZXhwbGljaXQgbG9ja2luZyBpcyBwcmVzZW50LiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSB4YXJyYXkgb3BlcmF0aW9ucyBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgaW4gdGhpcyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmN1X2RlcmVmZXJlbmNlX3Jhdy4qbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MjcwPXZvaWQgeGFzX2Rlc3Ryb3koc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTI3NS1cdFx0WEFfTk9ERV9CVUdfT04obm9kZSwgIWxpc3RfZW1wdHkoXHUwMDI2bm9kZS1cdTAwM2Vwcml2YXRlX2xpc3QpKTtcbmxpYi94YXJyYXkuYzoyNzY6XHRcdG5leHQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtXHUwMDNlcGFyZW50KTtcbmxpYi94YXJyYXkuYy0yNzctXHRcdHJhZGl4X3RyZWVfbm9kZV9yY3VfZnJlZShcdTAwMjZub2RlLVx1MDAzZXJjdV9oZWFkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGB4YXJyYXlgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgeGFzX2Rlc2NlbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGxpYi94YXJyYXkuY2AsIHdvcmtzLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgeGFycmF5IHB1enpsZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXQgaXMga2V5IHRvIFtpbnNlcnQgeW91ciBzcGVjaWZpYyB1bmRlcnN0YW5kaW5nIHJlbGF0ZWQgdG8geW91ciBleHBlcnRpc2UgaGVyZSAtIGUuZy4sIG9wdGltaXppbmcgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZyBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGlzc3VlLCB1bmRlcnN0YW5kaW5nIGEgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ3ksIGV0Yy5dLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgW21lbnRpb24geW91ciBoeXBvdGhlc2lzIGhlcmVdLiBTbyBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YXNfZGVzY2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIveGFycmF5LmM9MTgyPXN0YXRpYyB2b2lkICp4YXNfc3RhcnQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTIwMy1cbmxpYi94YXJyYXkuYzoyMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICp4YXNfZGVzY2VuZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcyxcbmxpYi94YXJyYXkuYy0yMDUtXHRcdFx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlKVxuLS1cbmxpYi94YXJyYXkuYz0yMzc9dm9pZCAqeGFzX2xvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTI0NS1cdFx0XHRicmVhaztcbmxpYi94YXJyYXkuYzoyNDY6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcbmxpYi94YXJyYXkuYy0yNDctXHRcdGlmIChub2RlLVx1MDAzZXNoaWZ0ID09IDApXG4tLVxubGliL3hhcnJheS5jPTY0Nz1zdGF0aWMgdm9pZCAqeGFzX2NyZWF0ZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgYm9vbCBhbGxvd19yb290KVxuLS1cbmxpYi94YXJyYXkuYy02OTUtXHRcdH1cbmxpYi94YXJyYXkuYzo2OTY6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcbmxpYi94YXJyYXkuYy02OTctXHRcdHNsb3QgPSBcdTAwMjZub2RlLVx1MDAzZXNsb3RzW3hhcy1cdTAwM2V4YV9vZmZzZXRdO1xuLS1cbmxpYi94YXJyYXkuYz0xNTU1PXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmxpYi94YXJyYXkuYy0xNTcwLVx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlID0geGFfdG9fbm9kZShjdXJyKTtcbmxpYi94YXJyYXkuYzoxNTcxOlx0XHRcdGN1cnIgPSB4YXNfZGVzY2VuZCh4YXMsIG5vZGUpO1xubGliL3hhcnJheS5jLTE1NzItXHRcdH1cbi0tXG5saWIveGFycmF5LmM9MjExOT1ib29sIHhhX2dldF9tYXJrKHN0cnVjdCB4YXJyYXkgKnhhLCB1bnNpZ25lZCBsb25nIGluZGV4LCB4YV9tYXJrX3QgbWFyaylcbi0tXG5saWIveGFycmF5LmMtMjEyOC1cdFx0XHRnb3RvIGZvdW5kO1xubGliL3hhcnJheS5jOjIxMjk6XHRcdGVudHJ5ID0geGFzX2Rlc2NlbmQoXHUwMDI2eGFzLCB4YV90b19ub2RlKGVudHJ5KSk7XG5saWIveGFycmF5LmMtMjEzMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3OTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipEaXZpbmcgaW50byBgeGFzX2Rlc2NlbmRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhhc19kZXNjZW5kYCBmdW5jdGlvbi4gVGhpcyBzaG91bGQgYmUgaW4gYGxpYi94YXJyYXkuY2AsIHNvIEkmIzM5O2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUuIEkmIzM5O20ga2VlbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBYQXJyYXkgbGlicmFyeSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdXNlZnVsIGFzIHBhcnQgb2YgdGhpcyBwcm9qZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi94YXJyYXkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAwOlx0XHR4YXMtXHUwMDNleGFfbm9kZSA9IE5VTEw7XG4gMjAxOlx0XHRyZXR1cm4gZW50cnk7XG4gMjAyOlx0fVxuIDIwMzpcdFxuIDIwNDpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqeGFzX2Rlc2NlbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4gMjA1Olx0XHRcdFx0XHRcdHN0cnVjdCB4YV9ub2RlICpub2RlKVxuIDIwNjpcdHtcbiAyMDc6XHRcdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG4gMjA4Olx0XHR2b2lkICplbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcbiAyMDk6XHRcbiAyMTA6XHRcdHhhcy1cdTAwM2V4YV9ub2RlID0gbm9kZTtcbiAyMTE6XHRcdHdoaWxlICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xuIDIxMjpcdFx0XHRvZmZzZXQgPSB4YV90b19zaWJsaW5nKGVudHJ5KTtcbiAyMTM6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG4gMjE0Olx0XHRcdGlmIChub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNiB4YV9pc19ub2RlKGVudHJ5KSlcbiAyMTU6XHRcdFx0XHRlbnRyeSA9IFhBX1JFVFJZX0VOVFJZO1xuIDIxNjpcdFx0fVxuIDIxNzpcdFxuIDIxODpcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IG9mZnNldDtcbiAyMTk6XHRcdHJldHVybiBlbnRyeTtcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0LyoqXG4gMjIzOlx0ICogeGFzX2xvYWQoKSAtIExvYWQgYW4gZW50cnkgZnJvbSB0aGUgWEFycmF5IChhZHZhbmNlZCkuXG4gMjI0Olx0ICogQHhhczogWEFycmF5IG9wZXJhdGlvbiBzdGF0ZS5cbiAyMjU6XHQgKlxuIDIyNjpcdCAqIFVzdWFsbHkgd2Fsa3MgdGhlIEB4YXMgdG8gdGhlIGFwcHJvcHJpYXRlIHN0YXRlIHRvIGxvYWQgdGhlIGVudHJ5XG4gMjI3Olx0ICogc3RvcmVkIGF0IHhhX2luZGV4LiAgSG93ZXZlciwgaXQgd2lsbCBkbyBub3RoaW5nIGFuZCByZXR1cm4gJU5VTEwgaWZcbiAyMjg6XHQgKiBAeGFzIGlzIGluIGFuIGVycm9yIHN0YXRlLiAgeGFzX2xvYWQoKSB3aWxsIG5ldmVyIGV4cGFuZCB0aGUgdHJlZS5cbiAyMjk6XHQgKlxuIDIzMDpcdCAqIElmIHRoZSB4YV9zdGF0ZSBpcyBzZXQgdXAgdG8gb3BlcmF0ZSBvbiBhIG11bHRpLWluZGV4IGVudHJ5LCB4YXNfbG9hZCgpXG4gMjMxOlx0ICogbWF5IHJldHVybiAlTlVMTCBvciBhbiBpbnRlcm5hbCBlbnRyeSwgZXZlbiBpZiB0aGVyZSBhcmUgZW50cmllc1xuIDIzMjpcdCAqIHByZXNlbnQgd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgQHhhcy5cbiAyMzM6XHQgKlxuIDIzNDpcdCAqIENvbnRleHQ6IEFueSBjb250ZXh0LiAgVGhlIGNhbGxlciBzaG91bGQgaG9sZCB0aGUgeGFfbG9jayBvciB0aGUgUkNVIGxvY2suXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzIGFib3V0IGB4YV9lbnRyeWAsIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGEga25vd2xlZGdlYWJsZSBjb2xsZWFndWUuIEhlcmUmIzM5O3MgbXkgdGFrZToKCioqQW5hbHl6aW5nIHRoZSBgeGFfZW50cnlgIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGFfZW50cnlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoZSBicm9hZGVyIHN5c3RlbSBvciBjb2RlIGFyY2hpdGVjdHVyZSB3aGVyZSB0aGlzIHZhcmlhYmxlIGxpdmVzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0JiMzOTtzIGEgZGF0YSBzdHJ1Y3R1cmUsIGEgZnVuY3Rpb24gY2FsbCwgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSYjMzk7ZCBhc3N1bWUgaXQmIzM5O3MgYW4gZW50cnkgcG9pbnQgZm9yIGFuIFhBIHRyYW5zYWN0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgWEEgY29uY2VwdHM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBgeGFfc3RhcnRgLCBgeGFfZW5kYCwgYHhhX3ByZXBhcmVgLCBgeGFfY29tbWl0YCwgYHhhX3JvbGxiYWNrYCBmdW5jdGlvbnM/IElmIHNvLCB3aGljaCBvbmUgaXMgdGhpcywgb3IgaXMgdGhpcyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgWEEgcmVzb3VyY2VzPyBJcyB0aGVyZSBhIGRvY3VtZW50YXRpb24gcmVmZXJlbmNlIEkgY2FuIHF1aWNrbHkgY2hlY2ssIG9yIHJlbGF0ZWQgY29kZSB0aGF0IHByb3ZpZGVzIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgYXJlLiBBbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyB0eXBlIHdpbGwgYmUgd3JvbmcuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nIHdpdGggaXQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIsIHRoZSByZXNvdXJjZSBtYW5hZ2VycywgYW5kIGFueSBvdGhlciByZWxldmFudCBwaWVjZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgY29udHJvbCBpcyB2aXRhbC4gSXMgdGhpcyB2YXJpYWJsZSB1c2VkIGRpcmVjdGx5IGluIGEgZnVuY3Rpb24gY2FsbCwgYSBzdHJ1Y3R1cmUsIG9yIGluZGlyZWN0bHk/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgbGlua2VkIHRvIHRoZSB1c2Ugb2YgYHhhX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgYXRvbWljaXR5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPwoKVWx0aW1hdGVseSwgSSB3YW50IHRvIGZvcm0gYSBtZW50YWwgbW9kZWwgb2YgaG93IGB4YV9lbnRyeWAgY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgdGhlIHJpc2tzLCBhbmQgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIHhhX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NDcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipGaW5kaW5nIHRoZSBgeGFfZW50cnlgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGxvY2F0ZSB0aGlzIGB4YV9lbnRyeWAgcXVpY2tseSBhbmQgZWZmaWNpZW50bHkuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBwcm9iYWJseSBkZXBlbmQgb24gdGhlIGNvbnRleHQuIEFtIEkgZGVhbGluZyB3aXRoIGEgZGF0YWJhc2UgcXVlcnk/IEEgY29uZmlndXJhdGlvbiBmaWxlPyBTb3VyY2UgY29kZT8gRWFjaCBkZW1hbmRzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHRhY3RpYy4KCklmIGl0JiMzOTtzIGNvZGUsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIHVzaW5nIG15IElERSYjMzk7cyBmdW5jdGlvbmFsaXR5IOKAkyBhIHNpbXBsZSAmIzM0O2ZpbmQgaW4gZmlsZXMmIzM0OyBvcGVyYXRpb24gc2hvdWxkIGRvIHRoZSB0cmljaywgbGV2ZXJhZ2luZyB3aWxkY2FyZHMgb3IgcmVnZXggaWYgbmVjZXNzYXJ5IHRvIGFjY291bnQgZm9yIHZhcmlhdGlvbnMgaW4gbmFtaW5nIGNvbnZlbnRpb25zIChlLmcuLCBgeGFFbnRyeWAsIGBYQUVudHJ5YCwgYHhfYV9lbnRyeWApLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXN1bHRzLCBub3RpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXMgaXQgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbj8gQSBmdW5jdGlvbiBjYWxsPyBBIGRhdGEgc3RydWN0dXJlIG1lbWJlcj8gVGhpcyBjb250ZXh0dWFsIHVuZGVyc3RhbmRpbmcgaXMgY3J1Y2lhbC4KCklmIHRoZSBjb250ZXh0IGlzIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgdHJ5IHNlYXJjaGluZyBpbnNpZGUgdGhlIGZpbGUuIEkgbWlnaHQgdXNlIHRoZSBmaWxlIHNlYXJjaCB1dGlsaXR5LCBkZXBlbmRpbmcgb24gaG93IGxhcmdlIHRoZSBmaWxlcyBhcmUuIE1heWJlIGl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIE9yIGl0IGNvdWxkIGJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSBjb25maWcgZmlsZSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHBsYWNlcy4KCklmIGl0JiMzOTtzIG1vcmUgY29uY2VwdHVhbCwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIFdoYXQgZG9lcyBhbiAmIzM0O1hBIGVudHJ5JiMzNDsgdHlwaWNhbGx5IHJlcHJlc2VudD8gSXMgaXQgcmVsYXRlZCB0byBkaXN0cmlidXRlZCB0cmFuc2FjdGlvbnM/IFJlc291cmNlIG1hbmFnZXJzPyBYQSBpbnRlcmZhY2VzPyBUaGlzIG1lbnRhbCBmcmFtZXdvcmsgd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHRoZSBzZWFyY2ggc3BhY2UgYW5kIGFudGljaXBhdGUgd2hlcmUgSSYjMzk7bSBsaWtlbHkgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZS4gSSB3aWxsIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBvYmZ1c2NhdGVkLgoKTXkgaW1tZWRpYXRlIGdvYWwgaXNuJiMzOTt0IGp1c3QgdG8gKmZpbmQqIGl0LCBidXQgdG8gKnVuZGVyc3RhbmQqIGl0LiBPbmNlIEkmIzM5O3ZlIGxvY2F0ZWQgdGhlIGB4YV9lbnRyeWAsIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHB1cnBvc2UsIHNjb3BlLCBhbmQgZGVwZW5kZW5jaWVzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIG1vZGlmaWNhdGlvbiBJIG1pZ2h0IG5lZWQgdG8gcGVyZm9ybS4gSSBtaWdodCBldmVuIGNyZWF0ZSBhIG5vdGUgdG8gY2FwdHVyZSBob3cgSSBmb3VuZCBpdCwgdG8gc3RyZWFtbGluZSBmdXR1cmUgc2VhcmNoZXMuIExldCYjMzk7cyBnZXQgY3JhY2tpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhX2VudHJ5XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgveGFycmF5Lmg9MTIxNT1zdGF0aWMgaW5saW5lIHZvaWQgKnhhX2hlYWRfbG9ja2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhKVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMS0vKiBQcml2YXRlICovXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjEyMjI6c3RhdGljIGlubGluZSB2b2lkICp4YV9lbnRyeShjb25zdCBzdHJ1Y3QgeGFycmF5ICp4YSxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTYxND1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19yZWxvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjIzLVx0XHRvZmZzZXQgPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAzZVx1MDAzZSBub2RlLVx1MDAzZXNoaWZ0KSBcdTAwMjYgWEFfQ0hVTktfTUFTSztcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTYyNDpcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE2MjUtXHRcdGlmICgheGFfaXNfc2libGluZyhlbnRyeSkpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMwLVx0fVxuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNjMxOlx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTYzMi19XG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzE3PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfZW50cnkoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMC1cdFx0XHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzMxOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCAmIzQzOyAxKTtcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMi1cdFx0aWYgKHVubGlrZWx5KHhhX2lzX2ludGVybmFsKGVudHJ5KSkpXG4tLVxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzc0PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCxcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3ODktXHRcdHJldHVybiB4YXNfZmluZF9tYXJrZWQoeGFzLCBtYXgsIG1hcmspO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNzkwOlx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE3OTEtXHRpZiAoIWVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTg3Mz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19wcmV2KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxuLS1cbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg4Mi1cdHhhcy1cdTAwM2V4YV9vZmZzZXQtLTtcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTg4MzpcdHJldHVybiB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODg0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oPTE5MDI9c3RhdGljIGlubGluZSB2b2lkICp4YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTEtXHR4YXMtXHUwMDNleGFfb2Zmc2V0JiM0MzsmIzQzOztcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTkxMjpcdHJldHVybiB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xOTEzLX1cbi0tXG5saWIveGFycmF5LmM9MjA0PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqeGFzX2Rlc2NlbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsXG4tLVxubGliL3hhcnJheS5jLTIwNy1cdHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgbm9kZSk7XG5saWIveGFycmF5LmM6MjA4Olx0dm9pZCAqZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5saWIveGFycmF5LmMtMjA5LVxuLS1cbmxpYi94YXJyYXkuYy0yMTItXHRcdG9mZnNldCA9IHhhX3RvX3NpYmxpbmcoZW50cnkpO1xubGliL3hhcnJheS5jOjIxMzpcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XG5saWIveGFycmF5LmMtMjE0LVx0XHRpZiAobm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjYgeGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEyNzg9dm9pZCB4YXNfcGF1c2Uoc3RydWN0IHhhX3N0YXRlICp4YXMpXG4tLVxubGliL3hhcnJheS5jLTEyODgtXHRcdHdoaWxlICgmIzQzOyYjNDM7b2Zmc2V0IFx1MDAzYyBYQV9DSFVOS19TSVpFKSB7XG5saWIveGFycmF5LmM6MTI4OTpcdFx0XHRpZiAoIXhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLCBub2RlLCBvZmZzZXQpKSlcbmxpYi94YXJyYXkuYy0xMjkwLVx0XHRcdFx0YnJlYWs7XG4tLVxubGliL3hhcnJheS5jPTEzMDk9dm9pZCAqX194YXNfcHJldihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTMzMC1cdGZvciAoOzspIHtcbmxpYi94YXJyYXkuYzoxMzMxOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xubGliL3hhcnJheS5jLTEzMzItXHRcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEzNDg9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTM2OS1cdGZvciAoOzspIHtcbmxpYi94YXJyYXkuYzoxMzcwOlx0XHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cdTAwM2V4YSwgeGFzLVx1MDAzZXhhX25vZGUsIHhhcy1cdTAwM2V4YV9vZmZzZXQpO1xubGliL3hhcnJheS5jLTEzNzEtXHRcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXG4tLVxubGliL3hhcnJheS5jPTEzOTY9dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuLS1cbmxpYi94YXJyYXkuYy0xNDI1LVxubGliL3hhcnJheS5jOjE0MjY6XHRcdGVudHJ5ID0geGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCk7XG5saWIveGFycmF5LmMtMTQyNy1cdFx0aWYgKHhhX2lzX25vZGUoZW50cnkpKSB7XG4tLVxubGliL3hhcnJheS5jPTE0NjU9dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXG4tLVxubGliL3hhcnJheS5jLTE1MDUtXHRcdGlmICghYWR2YW5jZSkge1xubGliL3hhcnJheS5jOjE1MDY6XHRcdFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXHUwMDNleGEsIHhhcy1cdTAwM2V4YV9ub2RlLCB4YXMtXHUwMDNleGFfb2Zmc2V0KTtcbmxpYi94YXJyYXkuYy0xNTA3LVx0XHRcdGlmICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xuLS1cbmxpYi94YXJyYXkuYy0xNTI0LVxubGliL3hhcnJheS5jOjE1MjU6XHRcdGVudHJ5ID0geGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCk7XG5saWIveGFycmF5LmMtMTUyNi1cdFx0aWYgKCFlbnRyeSBcdTAwMjZcdTAwMjYgISh4YV90cmFja19mcmVlKHhhcy1cdTAwM2V4YSkgXHUwMDI2XHUwMDI2IG1hcmsgPT0gWEFfRlJFRV9NQVJLKSlcbi0tXG5saWIveGFycmF5LmM9MTkyMD1pbnQgeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcbi0tXG5saWIveGFycmF5LmMtMTkyNi1cbmxpYi94YXJyYXkuYzoxOTI3Olx0WEFfTk9ERV9CVUdfT04oeGFzLVx1MDAzZXhhX25vZGUsIHhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLFxubGliL3hhcnJheS5jLTE5MjgtXHRcdCAgICAgICB4YXMtXHUwMDNleGFfbm9kZSwgeGFzLVx1MDAzZXhhX29mZnNldCkpKTtcbi0tXG5saWIveGFycmF5LmMtMTkzMy1cdFx0XHRicmVhaztcbmxpYi94YXJyYXkuYzoxOTM0Olx0XHRpZiAoIXhhX2lzX3NpYmxpbmcoeGFfZW50cnkoeGFzLVx1MDAzZXhhLCB4YXMtXHUwMDNleGFfbm9kZSwgc2xvdCkpKVxubGliL3hhcnJheS5jLTE5MzUtXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdC4gSGVyZSB3ZSBnbzoKCioqQW5hbHl6aW5nIGB4YV9lbnRyeWAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIGV4YW1pbmluZyB0aGlzIGB4YV9lbnRyeWAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBsaWtlbHkgcmVwcmVzZW50cyBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhIHBvaW50IG9mIGFjY2Vzcywgb3IgYSBrZXkgZWxlbWVudCBpbiB3aGF0ZXZlciBwcm9jZXNzIHdlJiMzOTtyZSBhbmFseXppbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZW50cywgaXRzIHB1cnBvc2UsIGFuZCBpdHMgYmVoYXZpb3IuIElzIGl0IGEgZGF0YWJhc2UgZW50cnk/IEEgY29uZmlndXJhdGlvbiBzZXR0aW5nPyBBIGhhbmRsZSB0byBhIHJlc291cmNlPyBPciBwZXJoYXBzIGEgcG9pbnRlcj8gSXRzIHR5cGUsIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBuZXh0IGxldmVsIGRvd24uIExldCYjMzk7cyBzZWUgd2hhdCBmdXJ0aGVyIGluZm9ybWF0aW9uIHRoZXJlIGlzLiBNeSBhbmFseXNpcyBoaW5nZXMgb24gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyAqaW5zaWRlKiBgeGFfZW50cnlgLCBhbmQgd2hhdCBpdHMgcmVsYXRpb25zaGlwIGlzIHRvIGV2ZXJ5dGhpbmcgZWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3hhcnJheS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIwOlx0XG4xMjIxOlx0LyogUHJpdmF0ZSAqL1xuMTIyMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfZW50cnkoY29uc3Qgc3RydWN0IHhhcnJheSAqeGEsXG4xMjIzOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcbjEyMjQ6XHR7XG4xMjI1Olx0XHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXHUwMDNlPSBYQV9DSFVOS19TSVpFKTtcbjEyMjY6XHRcdHJldHVybiByY3VfZGVyZWZlcmVuY2VfY2hlY2sobm9kZS1cdTAwM2VzbG90c1tvZmZzZXRdLFxuMTIyNzpcdFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZ4YS1cdTAwM2V4YV9sb2NrKSk7XG4xMjI4Olx0fVxuMTIyOTpcdFxuMTIzMDpcdC8qIFByaXZhdGUgKi9cbjEyMzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5X2xvY2tlZChjb25zdCBzdHJ1Y3QgeGFycmF5ICp4YSxcbjEyMzI6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCB4YV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxuMTIzMzpcdHtcbjEyMzQ6XHRcdFhBX05PREVfQlVHX09OKG5vZGUsIG9mZnNldCBcdTAwM2U9IFhBX0NIVU5LX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY4MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIwNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUkNVIFVzYWdlIGFuZCBQYXRjaCBGdXp6aW5nIFJlYWRpbmVzcyoqCgpPa2F5LCBzbyBsb29raW5nIGF0IGxpbmUgMTIyNiwgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWU6IGByY3VfZGVyZWZlcmVuY2VfY2hlY2tgIGlzIGJlaW5nIHVzZWQgaW4gYHhhX2VudHJ5YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiB1c2VzIGB4YXNfZm9yX2VhY2hgIHdoaWNoIGNhbGxzIGB4YV9lbnRyeWAgd2hpY2ggdGhlbiBjaGVja3MgZWl0aGVyIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAgb3IgYGxvY2tkZXBfaXNfaGVsZCgmYW1wO3hhLSZndDt4YV9sb2NrKWAuICBUaGUgcHJvYmxlbSBpcywgYHhhc19mb3JfZWFjaGAgaXMgKm5vdCogaG9sZGluZyBlaXRoZXIgb2YgdGhvc2UgbG9ja3Mgd2hlbiBpdCYjMzk7cyBjYWxsZWQhIEkmIzM5O20gc2VlaW5nIHRoYXQgYHNsb3RzX2xvY2tgIGlzIGhlbGQsIGJ1dCBub3QgdGhlIG5lZWRlZCBgeGFfbG9ja2AuICAKCldpdGggYENPTkZJR19QUk9WRV9SQ1VgIGVuYWJsZWQsIHRoaXMgaXMgZ29pbmcgdG8gdHJpZ2dlciBhIGBXQVJOSU5HOiBzdXNwaWNpb3VzIFJDVSB1c2FnZWAgb3Igc3BsYXQsIHNwZWNpZmljYWxseSBhIGByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB3aXRob3V0IGhvbGRpbmcgdGhlIGtleSFgIFRoaXMgaXMgYSBjbGFzc2ljIGV4YW1wbGUgb2YgYSBidWcgdGhhdCBzeXprYWxsZXIgb3IgbG9ja2RlcCB3aWxsIGRldGVjdCAqaW1tZWRpYXRlbHkqLgoKTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLiBZZXMsIGB4YXNfZm9yX2VhY2goJmFtcDt4YXMsIGVudHJ5LCBVTE9OR19NQVgpYCBjYWxscyBgeGFzX2ZpbmRgLCB3aGljaCAqZG9lcyogY2FsbCBgeGFfZW50cnlgLCB0cmlnZ2VyaW5nIHRoZSBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrYCBhbmQgdGhlIGxvY2tkZXAgd2FybmluZy4gQmVjYXVzZSB3ZSBhcmVuJiMzOTt0IGhvbGRpbmcgYHJjdV9yZWFkX2xvY2tgIG9yIGAmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXkueGFfbG9ja2AsIGJ1dCAqYXJlKiBob2xkaW5nIGBrdm0tJmd0O3Nsb3RzX2xvY2tgLCB3ZSYjMzk7cmUgZ29pbmcgdG8gZ2V0IHRoYXQgbG9ja2RlcCBjb21wbGFpbnQhCgpUaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyEKCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nOiBUcnVlIQotICAgSXQgbW9kaWZpZXMgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIGNvcmUgS1ZNIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhdHRyaWJ1dGUgaGFuZGxpbmcuCi0gICBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIChga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgKSwgY2hhbmdlcyBsb2NraW5nIGFzc3VtcHRpb25zLCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MsIGFuZCBleHBvc2VzIHRoZSBzeXN0ZW0gdG8gcG90ZW50aWFsIGJ1Z3MgbGlrZSB0aGUgUkNVIGxvY2tkZXAgdmlvbGF0aW9uIEkgZm91bmQsIGFuZCBwb3NzaWJseSBpbmZpbml0ZSBsb29wcyB2aWEgYHhhX2lzX3JldHJ5YCwgYW5kIGFsc28gcGVyZm9ybWFuY2UgaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIG1heGltaXplIGZ1enppbmcgZWZmaWNpZW5jeS4gIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQgYXJlIHRoZSBrZXkgZW50cnlwb2ludHMgaGVyZToKLSAgIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AKLSAgIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYAotICAgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgCgpga3ZtX2NyZWF0ZV92bWAgaXMgYSBob3QgcGF0aCBidXQgdG9vIHViaXF1aXRvdXM7IGl0JiMzOTtzIGNhbGxlZCBpbiBuZWFybHkgZXZlcnkgS1ZNIHRlc3QuICBIb3dldmVyLCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AsIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIGFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIG1lbW9yeSBhdHRyaWJ1dGUgZmVhdHVyZS4KCkkgZG8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIHRob3VnaCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGlzIGBzdGF0aWNgLCB0aGF0IGl0IHdpbGwgc3RpbGwgaGF2ZSBhIHN5bWJvbCBpbiB0aGUgdm1saW51eC4gIExldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJ1bGVzLiBBaCwgeWVzLCBzdGF0aWMgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKmRvKiBoYXZlIHN5bWJvbHMuIEkgY2FuIGxpc3QgYm90aCB0aGF0IGFuZCBpdHMgY2FsbGVycy4KCkNoZWNraW5nIGNhbGxlcnMsIEkgc2VlIHRoYXQgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGNhbGxzIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AuICBBbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgIGlzIHRoZSBkaXJlY3QgaW9jdGwgZW50cnlwb2ludCB3aGljaCBjYWxscyBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AuICBTbywgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgIGFyZSBteSBgRm9jdXNTeW1ib2xzYC4KCk5vdyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcmVsZXZhbnQgY29kZSBpcyBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFNvLCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWdzIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSXQmIzM5O3Mgc2VsZWN0ZWQgYnkgc2V2ZXJhbCBvdGhlciBjb25maWdzOgotICAgYEtWTWAgKHRoZSBvYnZpb3VzIGZpcnN0IG9uZSEpCgpDaGVja2luZyBpbiBgdmlydC9rdm0vS2NvbmZpZ2AsIGl0JiMzOTtzIGNsZWFyIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgYSBib29sLgoKTm93LCBJJiMzOTtsbCBjaGVjayBhbGwgYXJjaGl0ZWN0dXJlcyB0byBzZWUgd2hhdCBzZWxlY3RzIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIEkgZm91bmQ6Ci0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWA6IGRlcGVuZHMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLgotICAgYEtWTV9JTlRFTF9URFhgOiBkZXBlbmRzIG9uIGBJTlRFTF9URFhfSE9TVAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBLVk1fWDg2IFx1MDAyNlx1MDAyNiBYODZfNjRcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3Olx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE0MQoJCQkJCQkJb3V0cHV0OiAyNzEKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGUgdGFzayBvZiBmaWd1cmluZyBvdXQgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIG9wdGlvbnMgdG8gZW5hYmxlIGFuZCB3b3JrIHdpdGggdGhpcyBLVk0gZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZSAoYW1kNjQsIGFzIHRoZSB1c2VyIHNwZWNpZmllZCkuIFRoZSBrZXkgaGVyZSBpcyB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludC4KCk15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzaG93cyB0aGF0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCAqb25seSogd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuIFRvIGVuYWJsZSBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIEkgbmVlZCB0byBlbmFibGU6IGBLVk1gLCBgS1ZNX0lOVEVMYCAqb3IqIGBLVk1fQU1EYCAod2hpY2ggaW1wbGllcyBgS1ZNX1g4NmApLCBgRVhQRVJUYCwgYW5kIG9mIGNvdXJzZSwgYEtWTV9TV19QUk9URUNURURfVk1gIGl0c2VsZiwgYW5kIGFsc28gYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4KCkkgdGhlbiB3ZW50IHRocm91Z2ggYSB0aG9yb3VnaCBjaGVjaywgdmVyaWZ5aW5nIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggY29uZmlnLiBJIHJlY29uZmlybWVkOiBgVklSVFVBTElaQVRJT049eWAsIGBLVk09eWAgb3IgYG1gLCBgS1ZNX0lOVEVMPXlgIG9yIGBtYCAob3IgYEtWTV9BTURgKSwgYEVYUEVSVD15YCwgYEtWTV9TV19QUk9URUNURURfVk09eWAsIGFuZCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVM9eWAuIEkgYWxzbyBkb3VibGUtY2hlY2tlZCBgS1ZNX0FNRF9TRVY9eWAgYXMgYW4gYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uLCBqdXN0IGluIGNhc2UuCgpJIHJldmlzaXRlZCB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODMtOTUsIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgSSBoYWRuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBtYWRlIHN1cmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGUgZGVwZW5kZW5jeSBgRVhQRVJUYCBpcyByZXF1aXJlZC4gSSByZS1yZWFkIHRoZSByZWxldmFudCBzZWN0aW9uIGFib3V0IGlkZW50aWZ5aW5nIEVuYWJsZUNvbmZpZ3MgdG8gbWFrZSBzdXJlIEkgZm9sbG93ZWQgdGhlIGd1aWRlbGluZXM6IGluc3BlY3RpbmcgS2NvbmZpZyBmaWxlcywgY2hlY2tpbmcgJiMzOTtkZXBlbmRzIG9uJiMzOTsgbGluZXMsIGFuZCBzdHJpcHBpbmcgJiMzOTtDT05GSUdfJiMzOTsuCgpUaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IG9mIEVuYWJsZUNvbmZpZ3MgSSBuZWVkIHRvIHVzZSBpczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgYW5kIGBFWFBFUlRgLiBJIGJlbGlldmUgSSBoYXZlIGlkZW50aWZpZWQgYWxsIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBGb2N1c1N5bWJvbHM6IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYCwgYW5kIHRoZSByZWFzb25pbmcgYmVoaW5kIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgY2FuIHN1bW1hcml6ZSB0aGUgY3J1Y2lhbCBwb2ludDogdGhlIHBhdGNoIHBsYWNlcyBhIGJvdW5kIG9uIG1lbW9yeSBhdHRyaWJ1dGUgZW50cmllcyBhbmQgaW50cm9kdWNlcyBhIGZ1bmN0aW9uLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB3aGljaCBoYXMgaXNzdWVzIGJlY2F1c2UgaXQgaXRlcmF0ZXMgdGhyb3VnaCBhbiB4YXJyYXkgd2l0aG91dCBob2xkaW5nIHRoZSBuZWNlc3NhcnkgbG9ja3MuIFRoaXMgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGBpb2N0bCh2bV9mZCwgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCBhbmQgaXQgY291bGQgbGVhZCB0byBsb2NrZGVwIHdhcm5pbmdzLCBsb2NrdXBzLCBhbmQgdHJhdmVyc2FsIHByb2JsZW1zLiBUaGlzIGNvZGUgaXMgcmVsZXZhbnQgZm9yIHZpcnR1YWxpemF0aW9uIGZ1enppbmcgb24geDg2XzY0LgoKSSBhbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMgYW5kIHRoZSByZXN1bHRzLiBJIGFtIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9TV19QUk9URUNURURfVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMmIzM0OywKICAgICYjMzQ7RVhQRVJUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMmIzM0OywKICAgICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICAgJiMzNDtrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEtWTSBtZW1vcnkgYXR0cmlidXRlIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUywgdHJhY2tpbmcgbWF0ZXJpYWxpemVkIEdGTiBlbnRyaWVzIGluIG1lbV9hdHRyX2FycmF5LCBhbmQgYWRkaW5nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgdG8gcmVjYWxjdWxhdGUgdGhlIHBvcHVsYXRpb24gdXNpbmcgeGFzX2Zvcl9lYWNoKCkuIFRoaXMgY29kZSBpcyBleGVjdXRlZCBpbiByZWFjaGFibGUgdXNlci1zcGFjZSBpb2N0bCBwYXRocyAoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUykuIEZ1cnRoZXJtb3JlLCBpdGVyYXRpbmcgdGhlIHhhcnJheSBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHdoaWxlIGhvbGRpbmcga3ZtLVx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiOGNkYTgyY2E4OTIzMDliOTk5YzdhNjRhNDY5NzRmYzQ0YjU5MWFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtNTczLDYgJiM0Mzs1NzMsMTMgQEAgc3RhdGljIGlubGluZSBpbnQga3ZtX3ZjcHVfZXhpdGluZ19ndWVzdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLgogICovCiAjZGVmaW5lIEtWTV9NRU1fTUFYX05SX1BBR0VTICgoMVVMICZsdDsmbHQ7IDMxKSAtIDEpCiYjNDM7LyoKJiM0MzsgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbgomIzQzOyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LAomIzQzOyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2YKJiM0MzsgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUwkoMVVMICZsdDsmbHQ7IDI1KQogCiAvKgogICogU2luY2UgYXQgaWRsZSBlYWNoIG1lbXNsb3QgYmVsb25ncyB0byB0d28gbWVtc2xvdCBzZXRzIGl0IGhhcyB0byBjb250YWluCkBAIC04NzcsNiAmIzQzOzg4NCw3IEBAIHN0cnVjdCBrdm0gewogI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUwogCS8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovCiAJc3RydWN0IHhhcnJheSBtZW1fYXR0cl9hcnJheTsKJiM0MzsJdW5zaWduZWQgbG9uZyBtZW1fYXR0cl9nZm5fY291bnQ7CiAjZW5kaWYKIAljaGFyIHN0YXRzX2lkW0tWTV9TVEFUU19OQU1FX1NJWkVdOwogfTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IDEwOGQ0MmM1YzFkNmEuLjI1YzFmZjBjMmE5M2UgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMTEyNyw3ICYjNDM7MTEyNyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKQogCXJjdXdhaXRfaW5pdCgmYW1wO2t2bS0mZ3Q7bW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpOwogCXhhX2luaXQoJmFtcDtrdm0tJmd0O3ZjcHVfYXJyYXkpOwogI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFUwotCXhhX2luaXQoJmFtcDtrdm0tJmd0O21lbV9hdHRyX2FycmF5KTsKJiM0MzsJeGFfaW5pdF9mbGFncygmYW1wO2t2bS0mZ3Q7bWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpOwomIzQzOwlrdm0tJmd0O21lbV9hdHRyX2dmbl9jb3VudCA9IDA7CiAjZW5kaWYKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7a3ZtLSZndDtncGNfbGlzdCk7CkBAIC0yNTQ0LDYgJiM0MzsyNTQ1LDMzIEBAIHN0YXRpYyBib29sIGt2bV9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwKIAlyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR0ZOcyB3aXRoIGEgbWF0ZXJpYWxpemVkIGVudHJ5IGluIG1lbV9hdHRyX2FycmF5LgomIzQzOyAqIFNlcmlhbGl6YXRpb24gYWdhaW5zdCBtb2RpZmljYXRpb25zIGlzIHByb3ZpZGVkIGJ5IGt2bS0mZ3Q7c2xvdHNfbG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhzdHJ1Y3Qga3ZtICprdm0pCiYjNDM7ewomIzQzOwlYQV9TVEFURSh4YXMsICZhbXA7a3ZtLSZndDttZW1fYXR0cl9hcnJheSwgMCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY291bnQgPSAwOwomIzQzOwl2b2lkICplbnRyeTsKJiM0MzsKJiM0MzsJeGFzX2Zvcl9lYWNoKCZhbXA7eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7CiYjNDM7CQlpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7CiYjNDM7CQkJeGFzX3BhdXNlKCZhbXA7eGFzKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWlmIChlbnRyeSkKJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKJiM0MzsJCQl4YXNfcGF1c2UoJmFtcDt4YXMpOwomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjb3VudDsKJiM0Mzt9CiYjNDM7CiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovCiBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKQpAQCAtMjU2Nyw2ICYjNDM7MjU5NSw3IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsCiAJfTsKIAl1bnNpZ25lZCBsb25nIGk7CiAJdm9pZCAqZW50cnk7CiYjNDM7CWJvb2wgbXV0YXRlZCA9IGZhbHNlOwogCWludCByID0gMDsKIAogCWVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDsKQEAgLTI1NzksNiAmIzQzOzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAlpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiYjNDM7CS8qCiYjNDM7CSAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uCiYjNDM7CSAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy4KJiM0MzsJICovCiYjNDM7CWlmIChhdHRyaWJ1dGVzICZhbXA7JmFtcDsKJiM0MzsJICAgIGt2bS0mZ3Q7bWVtX2F0dHJfZ2ZuX2NvdW50ICYjNDM7IChlbmQgLSBzdGFydCkgJmd0OyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHsKJiM0MzsJCXIgPSAtRU5PU1BDOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTQomIzQzOwkgKiBjb3VudGVyIG11c3QgYmUgcmVzeW5jaHJvbml6ZWQgb24gdGhlIHdheSBvdXQuICBFYXJseS1vdXRzIGFib3ZlCiYjNDM7CSAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuCiYjNDM7CSAqLwomIzQzOwltdXRhdGVkID0gdHJ1ZTsKJiM0MzsKIAkvKgogCSAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlcwogCSAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy4KQEAgLTI2MDMsNiAmIzQzOzI2NDksMTUgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCwKIAlrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sICZhbXA7cG9zdF9zZXRfcmFuZ2UpOwogCiBvdXRfdW5sb2NrOgomIzQzOwkvKgomIzQzOwkgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlCiYjNDM7CSAqIGNoYW5nZWQ6IG9uIEVOT01FTSBwYXJ0d2F5IHRocm91Z2ggdGhlIHJlc2VydmUgbG9vcCwgcGFydGlhbGx5CiYjNDM7CSAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWwKJiM0MzsJICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGUKJiM0MzsJICogd2FsayBzbyBpZGVtcG90ZW50IHJlcXVlc3RzIHN0YXkgTygxKS4KJiM0MzsJICovCiYjNDM7CWlmIChtdXRhdGVkKQomIzQzOwkJa3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnQgPSBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pOwogCW11dGV4X3VubG9jaygmYW1wO2t2bS0mZ3Q7c2xvdHNfbG9jayk7CiAKIAlyZXR1cm4gcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2NDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBmaXJpbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIG1ldGljdWxvdXNseS4KCkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgaXMganVzdCAmIzM0O2FwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIE5vdCBtdWNoIHRoZXJlLiBUaGUgZGlmZiBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbmQgdXRpbGl6aW5nIGEgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2l0aGluIEtWTSwgcmVsYXRlZCB0byBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzIChgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCkuIFRoaXMgc2VlbXMgbGlrZSBhIG5ldyBmZWF0dXJlLCBhIG1lY2hhbmlzbSB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IFBoeXNpY2FsIEZyYW1lIE51bWJlcnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlc2UgY2hhbmdlczoKCiogICBBIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0IGlzIGRlZmluZWQsIGxpa2VseSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZS4KKiAgIGB4YV9pbml0X2ZsYWdzYCBpcyB1c2VkLCB3aXRoIGBYQV9GTEFHU19BQ0NPVU5UYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCBzdWdnZXN0cyB0aGF0IGEgWEFycmF5IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIHVzZWQgdG8gbWFuYWdlIHRoZXNlIG1lbW9yeSBhdHRyaWJ1dGVzLCBhbmQgdGhlIGBYQV9GTEFHU19BQ0NPVU5UYCBmbGFnIG1lYW5zIGl0IHdpbGwga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMuIFRoaXMgaXMgd2hlcmUgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2lsbCBiZSB1cGRhdGVkLCBwcmVzdW1hYmx5LCBhZnRlciBlYWNoIG1lbW9yeSBhdHRyaWJ1dGUgaXMgc2V0LgoqICAgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBpcyBhZGRlZC4gVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIHRoZSBYQXJyYXkgdG8gZ2V0IHRoZSBjdXJyZW50IG51bWJlciBvZiBtZW1vcnkgYXR0cmlidXRlIGVudHJpZXMuIFRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBwZXJmb3JtaW5nIGEgY291bnQgb2YgdGhlIGVudHJpZXMgaW4gdGhlIFhBcnJheSBhbmQgaXMgdXNlZCB0byB1cGRhdGUgdGhlIGBtZW1fYXR0cl9nZm5fY291bnRgIHZhcmlhYmxlLgoKVGhlIG1haW4gbW9kaWZpY2F0aW9uIGlzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AuIFRoaXMgaXMgd2hlcmUgdGhlIGxpbWl0IGNoZWNrIGhhcHBlbnMuIElmIHRoZSBuZXcgYXR0cmlidXRlcywgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIGNvdW50LCBleGNlZWQgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AsIGl0IHJldHVybnMgYC1FTk9TUENgLiBUaGlzIGlzIHRvIGxpbWl0IHRoZSBwb3NzaWJsZSBudW1iZXIgb2YgbWVtb3J5IGF0dHJpYnV0ZXMuIEkgc2VlIHRoZSBjb2RlIGlzIGRvaW5nIGEgY2hlY2sgdG8gc2VlIGlmIHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgd2lsbCBleGNlZWQgdGhlIGxpbWl0LCBhbmQgaWYgc28sIGl0IHJldHVybnMgYW4gZXJyb3IuCgpUaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIHRoZSBlbnRyaWVzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdG8gZW5zdXJlIGFuIHVwcGVyIGxpbWl0IGlzbiYjMzk7dCBleGNlZWRlZCBpcyBpbnRlcmVzdGluZy4KCk5vdywgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWVyaXRzIGEgZnV6emluZyBzZXNzaW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgbGltaXQgY2hlY2ssIGl0JiMzOTtzIGVhc3kgdG8gcmVhY2ggdGhlIGxpbWl0LCBhbmQgaXQgdXNlcyBhbiBYQXJyYXkuCgpNeSBpbnR1aXRpb24gc2F5czogKipZZXMsIHRoaXMgd2FycmFudHMgZnV6emluZy4qKiBUaGVyZSBpcyBsaWtlbHkgYSBidWcgaW4gdGhlIGNvZGUgdGhhdCBJIGNhbiBmaW5kIHdpdGggS01TQU4uIFNwZWNpZmljYWxseSwgWEFycmF5cyBjYW4gaGF2ZSBpc3N1ZXMgd2l0aCBjb25jdXJyZW5jeSBvciBib3VuZGFyeSBjb25kaXRpb25zIHdoZW4gbW9kaWZpZWQuIFRoaXMgY2hlY2sgc2VlbXMgbGlrZSBhIGdyZWF0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIGFuIGVudHJ5LiBJdCBpcyBwb3NzaWJsZSB0aGUgY2hlY2sgaXMgbm90IGFjY3VyYXRlLCBhbmQgbWF5IG5vdCBhY3R1YWxseSByZWplY3QgZXZlcnkgdmFsaWQgZW50cnkuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGlmIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGlzIHJlYWNoZWQsIGZvciBleGFtcGxlLiBUaGUgY2hlY2sgY291bGQgYmUgYnlwYXNzZWQgaW4gc29tZSB3YXkuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXM6CgoxLiAgKipFeGNlZWQgdGhlIExpbWl0OioqIFRoZSBtb3N0IG9idmlvdXMgaXMgdG8gdHJ5IHRvIGV4Y2VlZCB0aGUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQgaW4gdmFyaW91cyB3YXlzLiBEb2VzIHRoZSBgLUVOT1NQQ2AgZXJyb3IgaGFuZGxlIGNvcnJlY3RseT8KMi4gICoqQ29uY3VycmVuY3k6KiogRXhwbG9pdCBjb25jdXJyZW50IGFjY2VzcyB0byBga3ZtLSZndDttZW1fYXR0cl9hcnJheWAgd2l0aCBtdWx0aXBsZSB0aHJlYWRzIG9yIFZNcy4gUmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgd2hlbiB3b3JraW5nIHdpdGggYW4gWEFycmF5LgozLiAgKipCb3VuZGFyeSBDb25kaXRpb25zOioqIENoZWNrIHRoZSBiZWhhdmlvcnMgb24gdGhlIGV4YWN0IGVkZ2VzIG9mIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGFuZCB3aGVuIHNldHRpbmcgYXR0cmlidXRlcyB0byB0aGUgc2FtZSBHRk4uCjQuICAqKkVycm9yIEhhbmRsaW5nOioqIFZlcmlmeSB0aGF0IGFsbCBlcnJvciBwYXRocyBhcmUgaGFuZGxlZCBzYWZlbHkuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCB0byBmdWxseSBncmFzcCB0aGUgbWVtb3J5IGF0dHJpYnV0ZSBsb2dpYy4gSSB3aWxsIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIG90aGVyIHVzYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz0yNTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1NzUtLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xudmlydC9rdm0va3ZtX21haW4uYzoyNTc2OnN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI1NzctXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2MDItXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI2MDM6XHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xudmlydC9rdm0va3ZtX21haW4uYy0yNjA0LVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MjY2NT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY4OS1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MjY5MDpcdHJldHVybiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgYXR0cnMtXHUwMDNlYXR0cmlidXRlcyk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAxOTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDI4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLVk0mIzM5O3MgQ29yZTogRXhhbWluaW5nIGEgU3BlY2lmaWMgU2VjdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGhlIEtWTSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgY2h1bmsgd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCDigJMgbGluZXMgMjU3MCB0byAyNzAwLiBUaGlzIGFyZWEgbGlrZWx5IGRlYWxzIHdpdGggYSBjcml0aWNhbCBmdW5jdGlvbiBvciBtb2R1bGUsIGdpdmVuIHRoZSBsZW5ndGggYW5kIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIGBrdm1fbWFpbi5jYCBmaWxlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZWl0aGVyIFZNIHNldHVwLCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgZ3Vlc3QtcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50LCBvciBpbnRlcnJ1cHQgaGFuZGxpbmcuIFBlcmhhcHMgaXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGEgY3J1Y2lhbCBldmVudCBsb29wIGNvbXBvbmVudCwgb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBDUFUgZmVhdHVyZSBvciBtZW1vcnkgbWFuYWdlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZGlzc2VjdCB0aGUgY29kZSB3aXRoaW4gdGhhdCByYW5nZSwgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5IG9mIHZhcmlhYmxlcywgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgcHJvZHVjZXMgaW4gdGhlIHdpZGVyIEtWTSBlY29zeXN0ZW0uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgbWFjaGluZSBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NzA6XHRcdH1cbjI1NzE6XHRcbjI1NzI6XHRcdHJldHVybiBjb3VudDtcbjI1NzM6XHR9XG4yNTc0Olx0XG4yNTc1Olx0LyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuMjU3NjpcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4yNTc3Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbjI1Nzg6XHR7XG4yNTc5Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xuMjU4MDpcdFx0XHQuc3RhcnQgPSBzdGFydCxcbjI1ODE6XHRcdFx0LmVuZCA9IGVuZCxcbjI1ODI6XHRcdFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcbjI1ODM6XHRcdFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcbjI1ODQ6XHRcdFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfc3RhcnQsXG4yNTg1Olx0XHRcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxuMjU4NjpcdFx0XHQubWF5X2Jsb2NrID0gdHJ1ZSxcbjI1ODc6XHRcdH07XG4yNTg4Olx0XHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcbjI1ODk6XHRcdFx0LnN0YXJ0ID0gc3RhcnQsXG4yNTkwOlx0XHRcdC5lbmQgPSBlbmQsXG4yNTkxOlx0XHRcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXG4yNTkyOlx0XHRcdC5oYW5kbGVyID0ga3ZtX2FyY2hfcG9zdF9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXG4yNTkzOlx0XHRcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcbjI1OTQ6XHRcdFx0Lm1heV9ibG9jayA9IHRydWUsXG4yNTk1Olx0XHR9O1xuMjU5NjpcdFx0dW5zaWduZWQgbG9uZyBpO1xuMjU5NzpcdFx0dm9pZCAqZW50cnk7XG4yNTk4Olx0XHRib29sIG11dGF0ZWQgPSBmYWxzZTtcbjI1OTk6XHRcdGludCByID0gMDtcbjI2MDA6XHRcbjI2MDE6XHRcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcbjI2MDI6XHRcbjI2MDM6XHRcdHRyYWNlX2t2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RhcnQsIGVuZCwgYXR0cmlidXRlcyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtcbjI2MDY6XHRcbjI2MDc6XHRcdC8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlIGVudGlyZSByYW5nZSBoYXMgdGhlIGRlc2lyZWQgYXR0cmlidXRlcy4gKi9cbjI2MDg6XHRcdGlmIChrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQsIGVuZCwgfjAsIGF0dHJpYnV0ZXMpKVxuMjYwOTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4yNjEwOlx0XG4yNjExOlx0XHQvKlxuMjYxMjpcdFx0ICogQm91bmQgdGhlIG51bWJlciBvZiBtYXRlcmlhbGl6ZWQgR0ZOcyBwZXIgVk0uICBTZWUgdGhlIGNvbW1lbnQgb25cbjI2MTM6XHRcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cbjI2MTQ6XHRcdCAqL1xuMjYxNTpcdFx0aWYgKGF0dHJpYnV0ZXMgXHUwMDI2XHUwMDI2XG4yNjE2Olx0XHQgICAga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCAmIzQzOyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbjI2MTc6XHRcdFx0ciA9IC1FTk9TUEM7XG4yNjE4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MTk6XHRcdH1cbjI2MjA6XHRcbjI2MjE6XHRcdC8qXG4yNjIyOlx0XHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbjI2MjM6XHRcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbjI2MjQ6XHRcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4yNjI1Olx0XHQgKi9cbjI2MjY6XHRcdG11dGF0ZWQgPSB0cnVlO1xuMjYyNzpcdFxuMjYyODpcdFx0LypcbjI2Mjk6XHRcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuMjYzMDpcdFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuMjYzMTpcdFx0ICovXG4yNjMyOlx0XHRmb3IgKGkgPSBzdGFydDsgaSBcdTAwM2MgZW5kOyBpJiM0MzsmIzQzOykge1xuMjYzMzpcdFx0XHRyID0geGFfcmVzZXJ2ZShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yNjM0Olx0XHRcdGlmIChyKVxuMjYzNTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjI2MzY6XHRcbjI2Mzc6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yNjM4Olx0XHR9XG4yNjM5Olx0XG4yNjQwOlx0XHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xuMjY0MTpcdFxuMjY0MjpcdFx0Zm9yIChpID0gc3RhcnQ7IGkgXHUwMDNjIGVuZDsgaSYjNDM7JiM0MzspIHtcbjI2NDM6XHRcdFx0ciA9IHhhX2Vycih4YV9zdG9yZShcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIGVudHJ5LFxuMjY0NDpcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUxfQUNDT1VOVCkpO1xuMjY0NTpcdFx0XHRLVk1fQlVHX09OKHIsIGt2bSk7XG4yNjQ2Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjY0NzpcdFx0fVxuMjY0ODpcdFxuMjY0OTpcdFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4yNjUwOlx0XG4yNjUxOlx0b3V0X3VubG9jazpcbjI2NTI6XHRcdC8qXG4yNjUzOlx0XHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4yNjU0Olx0XHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuMjY1NTpcdFx0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuMjY1NjpcdFx0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbjI2NTc6XHRcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4yNjU4Olx0XHQgKi9cbjI2NTk6XHRcdGlmIChtdXRhdGVkKVxuMjY2MDpcdFx0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbjI2NjE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4yNjYyOlx0XG4yNjYzOlx0XHRyZXR1cm4gcjtcbjI2NjQ6XHR9XG4yNjY1Olx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcbjI2NjY6XHRcdFx0XHRcdFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXG4yNjY3Olx0e1xuMjY2ODpcdFx0Z2ZuX3Qgc3RhcnQsIGVuZDtcbjI2Njk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBwaWVjZSBieSBwaWVjZS4gRmlyc3QsIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGFkZGVkIGEgaGFyZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IEZyYW1lIE51bWJlcnMpIHRoYXQgY2FuIGhhdmUgbWF0ZXJpYWxpemVkIGVudHJpZXMgaW4gdGhlIGBtZW1fYXR0cl9hcnJheWAgcGVyIFZNLiBUaGUgdmFsdWUgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgaXMgc2V0IHRvIGAxVUwgJmx0OyZsdDsgMjVgLCB3aGljaCB0cmFuc2xhdGVzIHRvLCB3aGF0LCAzMyw1NTQsNDMyIGVudHJpZXM/IFRoYXQgc2VlbXMgcmVhc29uYWJsZSBmb3IgYSBoYXJkZW5pbmcgbWVhc3VyZS4KCk5leHQsIGEgbmV3IGZpZWxkLCBgbWVtX2F0dHJfZ2ZuX2NvdW50YCAoYW4gYHVuc2lnbmVkIGxvbmdgKSwgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGBzdHJ1Y3Qga3ZtYC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIHdpbGwgdHJhY2sgdGhlIG51bWJlciBvZiBhY3RpdmUgZW50cmllcy4gVGhpcyBpcyBnb29kOyB3ZSBuZWVkIHRvIHRyYWNrIHRoaXMgc29tZWhvdyBpZiB3ZSB3YW50IHRvIGVuZm9yY2UgdGhlIGxpbWl0LgoKVGhlIGBrdm1fY3JlYXRlX3ZtYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgdGhlIGBtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGFsc28gc2V0cyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uIE9rYXksIHVzaW5nIGBYQV9GTEFHU19BQ0NPVU5UYCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIG5vdyBiZWluZyB1c2VkIHRvIHRyYWNrIGhvdyBtYW55IGVudHJpZXMgZXhpc3QgaW4gdGhlIGFycmF5IChwcm9iYWJseSBmb3IgdGhlIHB1cnBvc2Ugb2YgYXZvaWRpbmcgYW55IHNvcnQgb2Ygb3V0LW9mLW1lbW9yeSBlcnJvcikuIFRoaXMgaW5pdGlhbGl6YXRpb24gZW5zdXJlcyB3ZSBoYXZlIGEga25vd24gc3RhcnRpbmcgcG9pbnQuCgpUaGUgbmV3IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24gbG9va3MgaW50ZXJlc3RpbmcuIEl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIHhhcnJheSB1c2luZyBgeGFzX2Zvcl9lYWNoYC4gSXQgbG9va3MgbGlrZSBpdCBoYW5kbGVzIHJldHJpZXMgd2l0aCBgeGFzX3BhdXNlYCBhbmQgYXBwcm9wcmlhdGVseSBza2lwcyB0aG9zZSBlbnRyaWVzLiBJdCBjb3VudHMgdGhlIG51bWJlciBvZiBub24tTlVMTCBlbnRyaWVzIGFuZCBwYXVzZXMgaWYgbmVjZXNzYXJ5LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHdheSB0byBnZXQgYW4gYWNjdXJhdGUgY291bnQgb2YgdGhlIHVzZWQgZW50cmllcy4KCkZpbmFsbHksIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgd2Ugc2VlIHRoZSBlbmZvcmNlbWVudCBvZiB0aGUgbGltaXQuIFRoZSBwYXRjaCBjaGVja3MgaWYgdGhlIGFkZGl0aW9uIG9mIG5ldyBtZW1vcnkgYXR0cmlidXRlcyB3b3VsZCBleGNlZWQgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBJZiBzbywgaXQgcmV0dXJucyBgLUVOT1NQQ2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlIGFycmF5IGl0IHJlY2FsY3VsYXRlcyB0aGUgY291bnQgdXNpbmcgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gTWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBzaGlmdCBnZWFycyBhbmQgbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gRG9lcyB0aGlzIHBhdGNoIHNlbmQgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZT8gTm8sIHRoYXQmIzM5O3MgZ29vZC4KCklzIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgYnJhbmNoZXM/IFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGlzLiBMZXQmIzM5O3Mgc2VlOiBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGt2bV9jcmVhdGVfdm1gLiBHcmVhdC4gVGhlIGBrdm1gIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVGhpcyBtZWFucyB0aGF0IGFsbCBvZiB0aGUgZmllbGRzIGluIHRoZSBzdHJ1Y3QgYXJlIHplcm8taW5pdGlhbGl6ZWQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBob3cgYGt2bWAgaXMgYWxsb2NhdGVkIGluIGBrdm1fY3JlYXRlX3ZtYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhpcywgYnV0IGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHNhZmUgaGVyZS4KCkkgYmVsaWV2ZSB0aGlzIHBhdGNoIGlzIHdlbGwtd3JpdHRlbiBhbmQgc2FmZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2NyZWF0ZV92bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz05OTA9c3RhdGljIHZvaWQga3ZtX2Rlc3Ryb3lfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xMDA3LVxudmlydC9rdm0va3ZtX21haW4uYzoxMDA4OnN0YXRpYyBpbnQga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKHN0cnVjdCBrdm0gKmt2bSwgY29uc3QgY2hhciAqZmRuYW1lKVxudmlydC9rdm0va3ZtX21haW4uYy0xMDA5LXtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDc9c3RhdGljIHZvaWQga3ZtX2Rpc2FibGVfdmlydHVhbGl6YXRpb24odm9pZCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMDgtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMDk6c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMTAte1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE0My1cdCAqIEZvcmNlIHN1YnNlcXVlbnQgZGVidWdmcyBmaWxlIGNyZWF0aW9ucyB0byBmYWlsIGlmIHRoZSBWTSBkaXJlY3RvcnlcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTE0NDpcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExNDUtXHQgKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEyMDctXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEyMDg6XHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTIwOS1cdGlmIChyKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTU2ND1zdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzYtXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU1Nzc6XHRrdm0gPSBrdm1fY3JlYXRlX3ZtKHR5cGUsIGZkbmFtZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzgtXHRpZiAoSVNfRVJSKGt2bSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODkzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS1ZNIFZNIENyZWF0aW9uIEFsbG9jYXRpb24gSW5zcGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBjb3JlIHN0YWdlIG9mIFZNIGluaXRpYWxpemF0aW9uLiBJIHdhbnQgdG8gdGhvcm91Z2hseSBhc3Nlc3MgaG93IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIGFuZCBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb2J2aW91cyByZWQgZmxhZ3PigJRtZW1vcnkgbGVha3MsIGluZWZmaWNpZW50IGFsbG9jYXRpb24gcGF0dGVybnMsIG9yIHBvdGVudGlhbGx5IGV4Y2Vzc2l2ZSByZXNvdXJjZSBjb25zdW1wdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgaW5zdGFiaWxpdHkgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGFjdHVhbCBjYWxsIGl0c2VsZiwgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gVGhpcyB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGFueSBzdWJzZXF1ZW50IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExMDpcdHtcbjExMTE6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XG4xMTEyOlx0XHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcbjExMTM6XHRcdGludCByLCBpLCBqO1xuMTExNDpcdFxuMTExNTpcdFx0aWYgKCFrdm0pXG4xMTE2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTExNzpcdFxuMTExODpcdFx0S1ZNX01NVV9MT0NLX0lOSVQoa3ZtKTtcbjExMTk6XHRcdG1tZ3JhYihjdXJyZW50LVx1MDAzZW1tKTtcbjExMjA6XHRcdGt2bS1cdTAwM2VtbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4xMTIxOlx0XHRrdm1fZXZlbnRmZF9pbml0KGt2bSk7XG4xMTIyOlx0XHRtdXRleF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vsb2NrKTtcbjExMjM6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZWlycV9sb2NrKTtcbjExMjQ6XHRcdG11dGV4X2luaXQoXHUwMDI2a3ZtLVx1MDAzZXNsb3RzX2xvY2spO1xuMTEyNTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZrdm0tXHUwMDNlc2xvdHNfYXJjaF9sb2NrKTtcbjExMjY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xuMTEyNzpcdFx0cmN1d2FpdF9pbml0KFx1MDAyNmt2bS1cdTAwM2Vtbl9tZW1zbG90c191cGRhdGVfcmN1d2FpdCk7XG4xMTI4Olx0XHR4YV9pbml0KFx1MDAyNmt2bS1cdTAwM2V2Y3B1X2FycmF5KTtcbjExMjk6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXG4xMTMwOlx0XHR4YV9pbml0X2ZsYWdzKFx1MDAyNmt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheSwgWEFfRkxBR1NfQUNDT1VOVCk7XG4xMTMxOlx0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcbjExMzI6XHQjZW5kaWZcbjExMzM6XHRcbjExMzQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmt2bS1cdTAwM2VncGNfbGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDE5OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODYKCQkJCQkJCW91dHB1dDogMjE4CgkJCQkJCQl0aG91Z2h0czogNDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE1lbW9yeSBBdHRyaWJ1dGUgTGltaXQgZm9yIEtWTSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gd291bGQgYmUgZ29vZCBhdCBmaW5kaW5nLgoKYGt2bV9hcmNoX2FsbG9jX3ZtKClgIGNsZWFybHkgemVyb2VzIHRoZSBgc3RydWN0IGt2bWAsIGFuZCBzcGVjaWZpY2FsbHkgbGluZSAxMTMxIHplcm9lcyBga3ZtLSZndDttZW1fYXR0cl9nZm5fY291bnRgLiBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMb29raW5nIGF0IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHRoZSBgWEFfU1RBVEVgIG1hY3JvIGluaXRpYWxpemVzIHRoZSBgeGFzYCBzdHJ1Y3R1cmUsIGFuZCBgY291bnRgIGlzIHNldCB0byAwLiBTaW1pbGFybHksIGBtdXRhdGVkYCBpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgaW5pdGlhbGl6ZWQgdG8gZmFsc2UuIFNvLCBiYXNlZCBvbiB0aGUgY29kZSBpdHNlbGYsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBpbmZvIGxlYWtzLgoKVGhlIHBvaW50IG9mIHRoaXMgcGF0Y2ggaXMgYSByZXNvdXJjZSBsaW1pdCBhbmQgaGFyZGVuaW5nIG1lYXN1cmUsIGRlc2lnbmVkIHRvIHN0b3AgdGhlIHVuYm91bmRlZCBncm93dGggb2YgeGFycmF5IG5vZGUgYWxsb2NhdGlvbnMgd2hlbiBhIHVzZXIgY2FsbHMgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLiBBbnkgYnVncyBoZXJlIGFyZSBnb2luZyB0byBiZSBsb2dpYy1iYXNlZCwgcmVzb3VyY2UtbWFuYWdlbWVudCBpc3N1ZXMsIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgY29uY3VycmVuY3kgcHJvYmxlbXMgKHdoaWNoIGBsb2NrZGVwYCBzaG91bGQgY2F0Y2gpLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gKHdoaWNoIGBLQVNBTmAgaXMgZGVzaWduZWQgdG8gZGV0ZWN0KS4gQ3J1Y2lhbGx5LCBub25lIG9mIHRoZXNlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGludm9sdmUgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHRlc3Rpbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBpc3N1ZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrOiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdGFjaywgaGVhcCwgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gS0FTQU4gaXMgdGhlcmUgdG8gaGFuZGxlIE9PQiwgVUFGLCBkb3VibGUtZnJlZXMsIGV0Yy4gVGhpcyBwYXRjaCBhZGRzIGFuIGVudHJ5IGNvdW50ZXIgYW5kIGEgbGltaXQgY2hlY2sgZm9yIHRoZSBLVk0gbWVtb3J5IGF0dHJpYnV0ZXMgeGFycmF5IChgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCkuIFRoZSBgbWVtX2F0dHJfZ2ZuX2NvdW50YCBjb3VudGVyIGlzIGludHJvZHVjZWQsIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBoZWxwZXIgZnVuY3Rpb24gYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKClgIHdhbGtzIHRoZSB4YXJyYXkgYW5kIGNvdW50cyB0aGUgZW50cmllcy4gQWxsIHRoZSB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBubyB1c2VyLWNvcHlpbmcsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCByZWFkcy4gWWVwLCBldmVyeXRoaW5nIGxvb2tzIGdvb2QuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMTk6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHJlc291cmNlIGxpbWl0IChLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIGFuZCB0cmFja2luZyAobWVtX2F0dHJfZ2ZuX2NvdW50KSBmb3IgbWF0ZXJpYWxpemVkIGVudHJpZXMgaW4gS1ZNJiMzOTtzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxuXG5BbGwgYWRkZWQgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoaW5jbHVkaW5nIHRoZSBjb3VudGVyIGluIHN0cnVjdCBrdm0sIGxvY2FsIHN0YXRlIGluIGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMsIGFuZCB0aGUgaXRlcmF0b3IgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYnVmZmVycyBhcmUgZXhwb3NlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCBwZXJ0YWluIHRvIGFjY291bnRpbmcgbG9naWMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIGxvY2tpbmcvY29uY3VycmVuY3kgKGhhbmRsZWQgYnkgc3RhbmRhcmQgdGVzdHMgYW5kIExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSYjMzk7cyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cblxuQWxsIGFkZGVkIGFuZCBtb2RpZmllZCB2YXJpYWJsZXMgKGluY2x1ZGluZyB0aGUgY291bnRlciBpbiBzdHJ1Y3Qga3ZtLCBsb2NhbCBzdGF0ZSBpbiBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzLCBhbmQgdGhlIGl0ZXJhdG9yIGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbWVtb3J5IGJ1ZmZlcnMgYXJlIGV4cG9zZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbiwgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIGluIHRoaXMgcGF0Y2ggd291bGQgcGVydGFpbiB0byBhY2NvdW50aW5nIGxvZ2ljLCByZXNvdXJjZSBleGhhdXN0aW9uLCBvciBsb2NraW5nL2NvbmN1cnJlbmN5IChoYW5kbGVkIGJ5IHN0YW5kYXJkIHRlc3RzIGFuZCBMT0NLREVQKSwgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ1LjQ1MjE1ODI2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzIxMjM1NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgcmVzb3VyY2UgbGltaXQgKEtWTV9NRU1fQVRUUl9NQVhfR0ZOUykgYW5kIHRyYWNraW5nIChtZW1fYXR0cl9nZm5fY291bnQpIGZvciBtYXRlcmlhbGl6ZWQgZW50cmllcyBpbiBLVk0ncyBtZW1fYXR0cl9hcnJheSB4YXJyYXkgdG8gcHJldmVudCB1bmJvdW5kZWQgbWVtb3J5IGNvbnN1bXB0aW9uIGZyb20gS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBpb2N0bCBjYWxscy5cXG5cXG5BbGwgYWRkZWQgYW5kIG1vZGlmaWVkIHZhcmlhYmxlcyAoaW5jbHVkaW5nIHRoZSBjb3VudGVyIGluIHN0cnVjdCBrdm0sIGxvY2FsIHN0YXRlIGluIGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMsIGFuZCB0aGUgaXRlcmF0b3IgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBtZW1vcnkgYnVmZmVycyBhcmUgZXhwb3NlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW4gdGhpcyBwYXRjaCB3b3VsZCBwZXJ0YWluIHRvIGFjY291bnRpbmcgbG9naWMsIHJlc291cmNlIGV4aGF1c3Rpb24sIG9yIGxvY2tpbmcvY29uY3VycmVuY3kgKGhhbmRsZWQgYnkgc3RhbmRhcmQgdGVzdHMgYW5kIExPQ0tERVApLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gbWVtb3J5IGF0dHJpYnV0ZSBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMsIHRyYWNraW5nIG1hdGVyaWFsaXplZCBHRk4gZW50cmllcyBpbiBtZW1fYXR0cl9hcnJheSwgYW5kIGFkZGluZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHRvIHJlY2FsY3VsYXRlIHRoZSBwb3B1bGF0aW9uIHVzaW5nIHhhc19mb3JfZWFjaCgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gcmVhY2hhYmxlIHVzZXItc3BhY2UgaW9jdGwgcGF0aHMgKEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpLiBGdXJ0aGVybW9yZSwgaXRlcmF0aW5nIHRoZSB4YXJyYXkgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMTo0NS40NTIxNjQzOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODcwMjkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMTk6MDE6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhcXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiAgKiBUaGlzIG51bWJlciBtdXN0IGJlIGRldGVybWluZWQgbm90IHRvIGV4Y2VlZCBzdWNoIGxpbWl0cy5cXG4gICovXFxuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXFx1MDAzY1xcdTAwM2MgMzEpIC0gMSlcXG4rLypcXG4rICogSGFyZGVuaW5nIGJvdW5kOiBtYXhpbXVtIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW5cXG4rICogbWVtX2F0dHJfYXJyYXkgcGVyIFZNICh+MzAwIE1pQiBvZiB4YV9ub2RlcyBhdCAyXjI1KS4gIFdpdGhvdXQgaXQsXFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcXG4rICoga2VybmVsIG1lbW9yeSBwZXIgR0ZOKSBvbiBHRk5zIHdpdGggbm8gYmFja2luZyBtZW1vcnkuXFxuKyAqL1xcbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1xcdCgxVUwgXFx1MDAzY1xcdTAwM2MgMjUpXFxuIFxcbiAvKlxcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cXG5AQCAtODc3LDYgKzg4NCw3IEBAIHN0cnVjdCBrdm0ge1xcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIFxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXFxuIFxcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWVtX2F0dHJfZ2ZuX2NvdW50O1xcbiAjZW5kaWZcXG4gXFx0Y2hhciBzdGF0c19pZFtLVk1fU1RBVFNfTkFNRV9TSVpFXTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG5pbmRleCAxMDhkNDJjNWMxZDZhLi4yNWMxZmYwYzJhOTNlIDEwMDY0NFxcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcXG4rKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jXFxuQEAgLTExMjcsNyArMTEyNyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtICprdm1fY3JlYXRlX3ZtKHVuc2lnbmVkIGxvbmcgdHlwZSwgY29uc3QgY2hhciAqZmRuYW1lKVxcbiBcXHRyY3V3YWl0X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xcbiBcXHR4YV9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXZjcHVfYXJyYXkpO1xcbiAjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuLVxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xcbitcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4rXFx0a3ZtLVxcdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgPSAwO1xcbiAjZW5kaWZcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZrdm0tXFx1MDAzZWdwY19saXN0KTtcXG5AQCAtMjU0NCw2ICsyNTQ1LDMzIEBAIHN0YXRpYyBib29sIGt2bV9wcmVfc2V0X21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpbiBtZW1fYXR0cl9hcnJheS5cXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVxcdTAwM2VzbG90c19sb2NrLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxcbit7XFxuK1xcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcXG4rXFx0dm9pZCAqZW50cnk7XFxuK1xcbitcXHR4YXNfZm9yX2VhY2goXFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xcbitcXHRcXHRpZiAoeGFfaXNfcmV0cnkoZW50cnkpKSB7XFxuK1xcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVudHJ5KVxcbitcXHRcXHRcXHRjb3VudCsrO1xcbitcXG4rXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuK1xcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4rXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK1xcbiAvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbiBcXHR9O1xcbiBcXHR1bnNpZ25lZCBsb25nIGk7XFxuIFxcdHZvaWQgKmVudHJ5O1xcbitcXHRib29sIG11dGF0ZWQgPSBmYWxzZTtcXG4gXFx0aW50IHIgPSAwO1xcbiBcXG4gXFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xcbkBAIC0yNTc5LDYgKzI2MDgsMjMgQEAgc3RhdGljIGludCBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4gXFx0aWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXFxuK1xcdCAqIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUy5cXG4rXFx0ICovXFxuK1xcdGlmIChhdHRyaWJ1dGVzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBrdm0tXFx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCArIChlbmQgLSBzdGFydCkgXFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcXG4rXFx0XFx0ciA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogRnJvbSB0aGlzIHBvaW50IG9uIHRoZSByZXF1ZXN0IG11dGF0ZXMgdGhlIGFycmF5LCBzbyB0aGUgcGVyLVZNXFxuK1xcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcXG4rXFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4rXFx0ICovXFxuK1xcdG11dGF0ZWQgPSB0cnVlO1xcbitcXG4gXFx0LypcXG4gXFx0ICogUmVzZXJ2ZSBtZW1vcnkgYWhlYWQgb2YgdGltZSB0byBhdm9pZCBoYXZpbmcgdG8gZGVhbCB3aXRoIGZhaWx1cmVzXFxuIFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG5AQCAtMjYwMyw2ICsyNjQ5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuIFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnBvc3Rfc2V0X3JhbmdlKTtcXG4gXFxuIG91dF91bmxvY2s6XFxuK1xcdC8qXFxuK1xcdCAqIFJlc3luY2hyb25pemUgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9ubHkgd2hlbiB0aGUgYXJyYXkgbWF5IGhhdmVcXG4rXFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4rXFx0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxcbitcXHQgKiBzZXQgb3IgY2xlYXIgY2hhbmdlcyB0aGUgcG9wdWxhdGlvbi4gIE5vbi1tdXRhdGluZyBleGl0cyBza2lwIHRoZVxcbitcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbitcXHQgKi9cXG4rXFx0aWYgKG11dGF0ZWQpXFxuK1xcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ2LjAwMTU4MDQzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQ2MzgzNjkwNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fU1dfUFJPVEVDVEVEX1ZNXCIsXG4gICAgXCJLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiLFxuICAgIFwiRVhQRVJUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNcIixcbiAgICBcImt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNcIixcbiAgICBcImt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0gbWVtb3J5IGF0dHJpYnV0ZSBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBLVk1fTUVNX0FUVFJfTUFYX0dGTlMsIHRyYWNraW5nIG1hdGVyaWFsaXplZCBHRk4gZW50cmllcyBpbiBtZW1fYXR0cl9hcnJheSwgYW5kIGFkZGluZyBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpIHRvIHJlY2FsY3VsYXRlIHRoZSBwb3B1bGF0aW9uIHVzaW5nIHhhc19mb3JfZWFjaCgpLiBUaGlzIGNvZGUgaXMgZXhlY3V0ZWQgaW4gcmVhY2hhYmxlIHVzZXItc3BhY2UgaW9jdGwgcGF0aHMgKEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpLiBGdXJ0aGVybW9yZSwgaXRlcmF0aW5nIHRoZSB4YXJyYXkgaW4ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB3aGlsZSBob2xkaW5nIGt2bS1cXHUwMDNlc2xvdHNfbG9jayB3aXRob3V0IHJjdV9yZWFkX2xvY2sgb3IgeGFfbG9jayB3aWxsIHRyaWdnZXIgbG9ja2RlcC9QUk9WRV9SQ1Ugc3BsYXRzIHZpYSB4YV9lbnRyeSgpLCBhbmQgY29uZF9yZXNjaGVkKCkgd2hpbGUgdHJhdmVyc2luZyBtYWtlcyBpdCByaXBlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLlxuICAqL1xuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXHUwMDNjXHUwMDNjIDMxKSAtIDEpXG4rLypcbisgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpblxuKyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbisgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbisgKi9cbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiArODg0LDcgQEAgc3RydWN0IGt2bSB7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbiBcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XG4rXHR1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtcbiAjZW5kaWZcbiBcdGNoYXIgc3RhdHNfaWRbS1ZNX1NUQVRTX05BTUVfU0laRV07XG4gfTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMTA4ZDQyYzVjMWQ2YS4uMjVjMWZmMGMyYTkzZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMTI3LDcgKzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuK1x0a3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCA9IDA7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuQEAgLTI1NDQsNiArMjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCAwKTtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuK1x0dm9pZCAqZW50cnk7XG4rXG4rXHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7XG4rXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbitcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoZW50cnkpXG4rXHRcdFx0Y291bnQrKztcbitcbitcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4rXHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuK1x0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRlbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7XG5AQCAtMjU3OSw2ICsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuK1x0LypcbitcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXG4rXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXG4rXHQgKi9cbitcdGlmIChhdHRyaWJ1dGVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbitcdFx0ciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbitcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbitcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4rXHQgKi9cbitcdG11dGF0ZWQgPSB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuIFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuQEAgLTI2MDMsNiArMjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbitcdC8qXG4rXHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4rXHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuK1x0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuK1x0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbitcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4rXHQgKi9cbitcdGlmIChtdXRhdGVkKVxuK1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjQ2LjAwMTU4MjQzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEzMzc4MzI1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaW51eCBrZXJuZWwncyBLVk0gc3Vic3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkLiBGcm9tIHRoZSBmaWxlIGxpc3QsIGl0J3MgY2xlYXIgdGhpcyBpcyBmb2N1c2VkIG9uIG1lbW9yeSBhdHRyaWJ1dGVzLCBzcGVjaWZpY2FsbHk6IGBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmhgIGFuZCBgdmlydC9rdm0va3ZtX21haW4uY2AuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNvbnN0YW50LCBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCwgc2V0IHRvIDFVTCBcdTAwM2NcdTAwM2MgMjUsIHdoaWNoIGxvb2tzIGxpa2UgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgR2xvYmFsIEZyYW1lIE51bWJlcnMgKEdGTnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy4gIEEgbmV3IGB1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtgIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGt2bWAgd2hlbiBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpcyBkZWZpbmVkLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyByZWxhdGVkIHRvIGNvdW50aW5nIHRoZSBtZW1vcnkgYXR0cmlidXRlcy5cblxuSW4gYGt2bV9jcmVhdGVfdm0oKWAsIHdlIHNlZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGBrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50YCBzZXQgdG8gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgdXNpbmcgYW4gWEFycmF5IGZvciBtYW5hZ2luZyB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMsIHdoZXJlIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgYXJyYXkgd2lsbCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2Ygb2NjdXBpZWQgZW50cmllcy5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKClgIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGlzIFhBcnJheSB0byBjYWxjdWxhdGUgdGhlIG1lbW9yeSBhdHRyaWJ1dGVzIGNvdW50LlxuXG5JbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcygpYCwgYSBjcnVjaWFsIGJvdW5kIGNoZWNrIGlzIGFkZGVkOiBpZiB0aGUgcHJvcG9zZWQgR0ZOIGNvdW50IGV4Y2VlZHMgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gQWxzbywgdGhlcmUgaXMgYSBgbXV0YXRlZCA9IHRydWU7YCBmbGFnIHRvIHNpZ25hbCBhIGNoYW5nZSBpbiBtZW1vcnkgYXR0cmlidXRlcy4gRmluYWxseSwgd2hlbiB0aGUgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG11dGF0ZWQsIHRoZSBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgaXMgdXBkYXRlZCBieSBjYWxsaW5nIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcyhrdm0pYC5cblxuTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgaG93IEtWTSBtZW1vcnkgYXR0cmlidXRlcyAqYWN0dWFsbHkqIHdvcmssIGFuZCB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgaXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQuIEkgdGhpbmsgSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHF1aWNrbHkgbG9jYXRlIGFsbCBpbnN0YW5jZXMgb2YgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpbiB0aGUgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV2YWx1YXRlIHRoZSBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAxOjU5LjM3OTkxMDI3OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk5Mjc2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MTg0ND1lbnVtIGt2bV9pbnRyX3R5cGUge1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MTg1NTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0xODU2LSNkZWZpbmUga3ZtX2FyY2hfaGFzX3ByaXZhdGVfbWVtKGt2bSkgKChrdm0pLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSlcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Ni1cXHRkZXBlbmRzIG9uIEtWTV9YODYgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODc6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctODgtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTM0PWNvbmZpZyBLVk1fSU5URUxfVERYXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzctXFx0ZGVwZW5kcyBvbiBJTlRFTF9URFhfSE9TVFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzODpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzktXFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWc9MTU2PWNvbmZpZyBLVk1fQU1EX1NFVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTYxLVxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE2MjpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjMtXFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTgwOTQ9dm9pZCBrdm1fbW11X3ByZV9kZXN0cm95X3ZtKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODA5OS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjgxMDA6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtODEwMS1zdGF0aWMgYm9vbCBodWdlcGFnZV90ZXN0X21peGVkKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbixcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMDA5Mz1zdGF0aWMgaW50IGt2bV9hbGxvY19tZW1zbG90X21ldGFkYXRhKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0Mi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxNDM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMDE0NC1cXHRrdm1fbW11X2luaXRfbWVtc2xvdF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHNsb3QpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTcyNj1zdGF0aWMgaW5saW5lIGludCBrdm1fYXJjaF92Y3B1X21lbXNsb3RzX2lkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzEtXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjczMjojaWZuZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC03MzMtc3RhdGljIGlubGluZSBib29sIGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9Nzc3PXN0cnVjdCBrdm0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTg4My0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6ODg0OiNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtODg1LVxcdC8qIFByb3RlY3RlZCBieSBzbG90c19sb2NrIChmb3Igd3JpdGVzKSBhbmQgUkNVIChmb3IgcmVhZHMpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU2NT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbXNsb3RfaXNfZ21lbV9vbmx5KGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU3Mi1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MjU3MzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1NzQtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9nZXRfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjU5MT1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX21lbV9pc19wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI1OTQtfVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjU5Ni1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oPTM0Nj1UUkFDRV9FVkVOVChrdm1fZGlydHlfcmluZ19leGl0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzYwLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM2MTojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzYyLS8qXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaD0zNjc9VFJBQ0VfRVZFTlQoa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oLTM4NS0pO1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oOjM4NjojZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXFxuaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgtMzg3LVxcbi0tXFxudmlydC9rdm0vS2NvbmZpZz0xMDA9Y29uZmlnIEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcXG4tLVxcbnZpcnQva3ZtL0tjb25maWctMTAyLVxcbnZpcnQva3ZtL0tjb25maWc6MTAzOmNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL0tjb25maWctMTA0LSAgICAgICBib29sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTExMDk9c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTExMjgtXFx0eGFfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2V2Y3B1X2FycmF5KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMjk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEzMC1cXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTI2Nj1zdGF0aWMgdm9pZCBrdm1fZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEzMTQtXFx0Y2xlYW51cF9zcmN1X3N0cnVjdChcXHUwMDI2a3ZtLVxcdTAwM2VzcmN1KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjEzMTU6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTMxNi1cXHR4YV9kZXN0cm95KFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5KTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQxOT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9jbGVhcl9kaXJ0eV9sb2coc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDMyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQzMzojaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDM0LXN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY5MS19XFxudmlydC9rdm0va3ZtX21haW4uYzoyNjkyOiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTMtXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAwOC1cXHRcXHRyZXR1cm4gMTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUwMDk6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cXHRjYXNlIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVM6XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDEyLSNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fSVJRX1JPVVRJTkcgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTM6I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQxNC1cXHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTQyMy1cXHR9XFxudmlydC9rdm0va3ZtX21haW4uYzo1NDI0OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU0MjUtXFx0Y2FzZSBLVk1fQ1JFQVRFX0RFVklDRToge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjowMS41NzkxOTQ1MTRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjg2MzExNzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgS1ZNIGNvcmUuIE15IGZpcnN0IHN0ZXAgaXMgdG8gemVybyBpbiBvbiBpdHMgaW1wbGVtZW50YXRpb24gaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmVzIDI1NDAgdG8gMjY5NS4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIGZvciB0aGlzIHN5c3RlbSBjYWxsIGlzLiBUaW1lIHRvIGdldCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzU1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTQuNDQyMzE0NzYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU0MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU0MDpcXHRcXHQgKiBidXQgaXQncyBub3Qgb2J2aW91cyB0aGF0IGFsbG93aW5nIG5ldyBtYXBwaW5ncyB3aGlsZSB0aGUgYXR0cmlidXRlc1xcbjI1NDE6XFx0XFx0ICogYXJlIGluIGZsdXggaXMgZGVzaXJhYmxlIG9yIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxcbjI1NDI6XFx0XFx0ICovXFxuMjU0MzpcXHRcXHRrdm1fbW11X2ludmFsaWRhdGVfcmFuZ2VfYWRkKGt2bSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kKTtcXG4yNTQ0OlxcdFxcbjI1NDU6XFx0XFx0cmV0dXJuIGt2bV9hcmNoX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCByYW5nZSk7XFxuMjU0NjpcXHR9XFxuMjU0NzpcXHRcXG4yNTQ4OlxcdC8qXFxuMjU0OTpcXHQgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXFxuMjU1MDpcXHQgKiBTZXJpYWxpemF0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBpcyBwcm92aWRlZCBieSBrdm0tXFx1MDAzZXNsb3RzX2xvY2suXFxuMjU1MTpcXHQgKi9cXG4yNTUyOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcXG4yNTUzOlxcdHtcXG4yNTU0OlxcdFxcdFhBX1NUQVRFKHhhcywgXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xcbjI1NTU6XFx0XFx0dW5zaWduZWQgbG9uZyBjb3VudCA9IDA7XFxuMjU1NjpcXHRcXHR2b2lkICplbnRyeTtcXG4yNTU3OlxcdFxcbjI1NTg6XFx0XFx0eGFzX2Zvcl9lYWNoKFxcdTAwMjZ4YXMsIGVudHJ5LCBVTE9OR19NQVgpIHtcXG4yNTU5OlxcdFxcdFxcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcXG4yNTYwOlxcdFxcdFxcdFxcdHhhc19wYXVzZShcXHUwMDI2eGFzKTtcXG4yNTYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI1NjI6XFx0XFx0XFx0fVxcbjI1NjM6XFx0XFx0XFx0aWYgKGVudHJ5KVxcbjI1NjQ6XFx0XFx0XFx0XFx0Y291bnQrKztcXG4yNTY1OlxcdFxcbjI1NjY6XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuMjU2NzpcXHRcXHRcXHRcXHR4YXNfcGF1c2UoXFx1MDAyNnhhcyk7XFxuMjU2ODpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yNTY5OlxcdFxcdFxcdH1cXG4yNTcwOlxcdFxcdH1cXG4yNTcxOlxcdFxcbjI1NzI6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjI1NzM6XFx0fVxcbjI1NzQ6XFx0XFxuMjU3NTpcXHQvKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxuMjU3NjpcXHRzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbjI1Nzc6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGF0dHJpYnV0ZXMpXFxuMjU3ODpcXHR7XFxuMjU3OTpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwcmVfc2V0X3JhbmdlID0ge1xcbjI1ODA6XFx0XFx0XFx0LnN0YXJ0ID0gc3RhcnQsXFxuMjU4MTpcXHRcXHRcXHQuZW5kID0gZW5kLFxcbjI1ODI6XFx0XFx0XFx0LmFyZy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyxcXG4yNTgzOlxcdFxcdFxcdC5oYW5kbGVyID0ga3ZtX3ByZV9zZXRfbWVtb3J5X2F0dHJpYnV0ZXMsXFxuMjU4NDpcXHRcXHRcXHQub25fbG9jayA9IGt2bV9tbXVfaW52YWxpZGF0ZV9zdGFydCxcXG4yNTg1OlxcdFxcdFxcdC5mbHVzaF9vbl9yZXQgPSB0cnVlLFxcbjI1ODY6XFx0XFx0XFx0Lm1heV9ibG9jayA9IHRydWUsXFxuMjU4NzpcXHRcXHR9O1xcbjI1ODg6XFx0XFx0c3RydWN0IGt2bV9tbXVfbm90aWZpZXJfcmFuZ2UgcG9zdF9zZXRfcmFuZ2UgPSB7XFxuMjU4OTpcXHRcXHRcXHQuc3RhcnQgPSBzdGFydCxcXG4yNTkwOlxcdFxcdFxcdC5lbmQgPSBlbmQsXFxuMjU5MTpcXHRcXHRcXHQuYXJnLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLFxcbjI1OTI6XFx0XFx0XFx0LmhhbmRsZXIgPSBrdm1fYXJjaF9wb3N0X3NldF9tZW1vcnlfYXR0cmlidXRlcyxcXG4yNTkzOlxcdFxcdFxcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX2VuZCxcXG4yNTk0OlxcdFxcdFxcdC5tYXlfYmxvY2sgPSB0cnVlLFxcbjI1OTU6XFx0XFx0fTtcXG4yNTk2OlxcdFxcdHVuc2lnbmVkIGxvbmcgaTtcXG4yNTk3OlxcdFxcdHZvaWQgKmVudHJ5O1xcbjI1OTg6XFx0XFx0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XFxuMjU5OTpcXHRcXHRpbnQgciA9IDA7XFxuMjYwMDpcXHRcXG4yNjAxOlxcdFxcdGVudHJ5ID0gYXR0cmlidXRlcyA/IHhhX21rX3ZhbHVlKGF0dHJpYnV0ZXMpIDogTlVMTDtcXG4yNjAyOlxcdFxcbjI2MDM6XFx0XFx0dHJhY2Vfa3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdGFydCwgZW5kLCBhdHRyaWJ1dGVzKTtcXG4yNjA0OlxcdFxcbjI2MDU6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjA2OlxcdFxcbjI2MDc6XFx0XFx0LyogTm90aGluZyB0byBkbyBpZiB0aGUgZW50aXJlIHJhbmdlIGhhcyB0aGUgZGVzaXJlZCBhdHRyaWJ1dGVzLiAqL1xcbjI2MDg6XFx0XFx0aWYgKGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoa3ZtLCBzdGFydCwgZW5kLCB+MCwgYXR0cmlidXRlcykpXFxuMjYwOTpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjYxMDpcXHRcXG4yNjExOlxcdFxcdC8qXFxuMjYxMjpcXHRcXHQgKiBCb3VuZCB0aGUgbnVtYmVyIG9mIG1hdGVyaWFsaXplZCBHRk5zIHBlciBWTS4gIFNlZSB0aGUgY29tbWVudCBvblxcbjI2MTM6XFx0XFx0ICogS1ZNX01FTV9BVFRSX01BWF9HRk5TLlxcbjI2MTQ6XFx0XFx0ICovXFxuMjYxNTpcXHRcXHRpZiAoYXR0cmlidXRlcyBcXHUwMDI2XFx1MDAyNlxcbjI2MTY6XFx0XFx0ICAgIGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ICsgKGVuZCAtIHN0YXJ0KSBcXHUwMDNlIEtWTV9NRU1fQVRUUl9NQVhfR0ZOUykge1xcbjI2MTc6XFx0XFx0XFx0ciA9IC1FTk9TUEM7XFxuMjYxODpcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMjYxOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjE0LjQ0MjU2MDcwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMTI2MDQyNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBBdHRyaWJ1dGUgU2V0dGluZyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJlYWNoZWQgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtZW1vcnkgYXR0cmlidXRlcyBhcmUgc2V0IHdpdGhpbiB0aGUgS1ZNIHZpcnR1YWwgbWFjaGluZS4gTXkgZm9jdXMgaXMgbm93IG9uIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHVzZXItcHJvdmlkZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gVGhpcyB3aWxsIGJlIGFuIGltcG9ydGFudCBzdGVwIGluIG1hcHBpbmcgb3V0IGhvdyBtZW1vcnkgZ2V0cyBoYW5kbGVkIGFuZCB2aXJ0dWFsaXplZCBhdCB0aGUgbG93IGxldmVsLiBJJ2xsIHByb2JhYmx5IGJlIGZvY3VzaW5nIG9uIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXMgSSBnbyB0aHJvdWdoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjoxNi41NTUxNjgwNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTExMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjIwOlxcdFxcbjI2MjE6XFx0XFx0LypcXG4yNjIyOlxcdFxcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxcbjI2MjM6XFx0XFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxcbjI2MjQ6XFx0XFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4yNjI1OlxcdFxcdCAqL1xcbjI2MjY6XFx0XFx0bXV0YXRlZCA9IHRydWU7XFxuMjYyNzpcXHRcXG4yNjI4OlxcdFxcdC8qXFxuMjYyOTpcXHRcXHQgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXNcXG4yNjMwOlxcdFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG4yNjMxOlxcdFxcdCAqL1xcbjI2MzI6XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbjI2MzM6XFx0XFx0XFx0ciA9IHhhX3Jlc2VydmUoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMjYzNDpcXHRcXHRcXHRpZiAocilcXG4yNjM1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjM2OlxcdFxcbjI2Mzc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYzODpcXHRcXHR9XFxuMjYzOTpcXHRcXG4yNjQwOlxcdFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xcbjI2NDE6XFx0XFxuMjY0MjpcXHRcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuMjY0MzpcXHRcXHRcXHRyID0geGFfZXJyKHhhX3N0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBpLCBlbnRyeSxcXG4yNjQ0OlxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG4yNjQ1OlxcdFxcdFxcdEtWTV9CVUdfT04ociwga3ZtKTtcXG4yNjQ2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZwb3N0X3NldF9yYW5nZSk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdG91dF91bmxvY2s6XFxuMjY1MjpcXHRcXHQvKlxcbjI2NTM6XFx0XFx0ICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZVxcbjI2NTQ6XFx0XFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4yNjU1OlxcdFxcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcXG4yNjU2OlxcdFxcdCAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlXFxuMjY1NzpcXHRcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbjI2NTg6XFx0XFx0ICovXFxuMjY1OTpcXHRcXHRpZiAobXV0YXRlZClcXG4yNjYwOlxcdFxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4yNjYxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0cmV0dXJuIHI7XFxuMjY2NDpcXHR9XFxuMjY2NTpcXHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbjI2NjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXFxuMjY2NzpcXHR7XFxuMjY2ODpcXHRcXHRnZm5fdCBzdGFydCwgZW5kO1xcbjI2Njk6XFx0XFxuMjY3MDpcXHRcXHQvKiBmbGFncyBpcyBjdXJyZW50bHkgbm90IHVzZWQuICovXFxuMjY3MTpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZWZsYWdzKVxcbjI2NzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY3MzpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZWF0dHJpYnV0ZXMgXFx1MDAyNiB+a3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pKVxcbjI2NzQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjY3NTpcXHRcXHRpZiAoYXR0cnMtXFx1MDAzZXNpemUgPT0gMCB8fCBhdHRycy1cXHUwMDNlYWRkcmVzcyArIGF0dHJzLVxcdTAwM2VzaXplIFxcdTAwM2MgYXR0cnMtXFx1MDAzZWFkZHJlc3MpXFxuMjY3NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjc3OlxcdFxcdGlmICghUEFHRV9BTElHTkVEKGF0dHJzLVxcdTAwM2VhZGRyZXNzKSB8fCAhUEFHRV9BTElHTkVEKGF0dHJzLVxcdTAwM2VzaXplKSlcXG4yNjc4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2Nzk6XFx0XFxuMjY4MDpcXHRcXHRzdGFydCA9IGF0dHJzLVxcdTAwM2VhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuMjY4MTpcXHRcXHRlbmQgPSAoYXR0cnMtXFx1MDAzZWFkZHJlc3MgKyBhdHRycy1cXHUwMDNlc2l6ZSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4yNjgyOlxcdFxcbjI2ODM6XFx0XFx0LypcXG4yNjg0OlxcdFxcdCAqIHhhcnJheSB0cmFja3MgZGF0YSB1c2luZyBcXFwidW5zaWduZWQgbG9uZ1xcXCIsIGFuZCBhcyBhIHJlc3VsdCBzbyBkb2VzXFxuMjY4NTpcXHRcXHQgKiBLVk0uICBGb3Igc2ltcGxpY2l0eSwgc3VwcG9ydHMgZ2VuZXJpYyBhdHRyaWJ1dGVzIG9ubHkgb24gNjQtYml0XFxuMjY4NjpcXHRcXHQgKiBhcmNoaXRlY3R1cmVzLlxcbjI2ODc6XFx0XFx0ICovXFxuMjY4ODpcXHRcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKSAhPSBzaXplb2YodW5zaWduZWQgbG9uZykpO1xcbjI2ODk6XFx0XFxuMjY5MDpcXHRcXHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKTtcXG4yNjkxOlxcdH1cXG4yNjkyOlxcdCNlbmRpZiAvKiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG4yNjkzOlxcdFxcbjI2OTQ6XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pXFxuMjY5NTpcXHR7XFxuMjY5NjpcXHRcXHRyZXR1cm4gX19nZm5fdG9fbWVtc2xvdChrdm1fbWVtc2xvdHMoa3ZtKSwgZ2ZuKTtcXG4yNjk3OlxcdH1cXG4yNjk4OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChnZm5fdG9fbWVtc2xvdCk7XFxuMjY5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MTYuNTU1NTYxODY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDYzOTQxNzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb250ZXh0LCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIEtWTSBNZW1vcnkgQXR0cmlidXRlIFNldHRpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGhvdyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGBrdm1fdm1faW9jdGxgIGZyYW1ld29yay4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBtZW1vcnkgY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cCBhbmQgbWFuYWdlZCBmb3IgYSBLVk0gdmlydHVhbCBtYWNoaW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb250cm9sIGZsb3cgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVzZXIgc3BhY2UgcmVxdWVzdHMgYW5kIHRoZSBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hbmFnZW1lbnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgZnVuZGFtZW50YWwgcHVycG9zZSBvZiB0aGlzIElPQ1RMOiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHRvIG1vZGlmeSBhc3BlY3RzIG9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBzZXR0aW5nIG1lbW9yeSByZWdpb25zIGFzIGRldmljZSBtZW1vcnksIG1ha2luZyBpdCByZXNlcnZlZCwgcGVyaGFwcyBlbmFibGluZyBvciBkaXNhYmxpbmcgZmVhdHVyZXMgd2l0aGluIHRoZSBoeXBlcnZpc29yJ3MgbWVtb3J5IG1hcC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIHR5cGVzIG9mIElPQ1RMIGNhbGxzIGFyZSBzZW5zaXRpdmUuIEkgd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFsbCBpbnB1dHMgYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFyZSBtZXQuXG5cbk5vdywgZm9jdXNpbmcgb24gdGhlIGBrdm1fdm1faW9jdGxgIHNpZGUgb2YgdGhpbmdzLiBUaGlzIGlzIHdoZXJlIHRoZSBJT0NUTCBjYWxscyBjb21lIGluLiBga3ZtX3ZtX2lvY3RsYCBpcyB0aGUgY2VudHJhbCBkaXNwYXRjaCBmb3IgYWxsIFZNLWxldmVsIGNvbnRyb2wgY29tbWFuZHMuIEl0J3MgZXNzZW50aWFsbHkgdGhlIGdhdGVrZWVwZXIuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGUgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIHJlcXVlc3QgaXMgcm91dGVkIGZyb20gdGhlIGluaXRpYWwgdXNlciBzcGFjZSBpbnZvY2F0aW9uIHRocm91Z2ggdGhhdCBga3ZtX3ZtX2lvY3RsYCBzd2l0Y2ggc3RhdGVtZW50LiBXaGF0IGFyZSB0aGUgYXJndW1lbnQgcGFyc2luZyBhbmQgdmFsaWRhdGlvbiBzdGVwcyBhbG9uZyB0aGUgd2F5PyBUaGF0J3MgcHJvYmFibHkgd2hlcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBhcmUsIG9yIGF0IGxlYXN0IHdoZXJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGFyZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBXaGF0IHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgLCBib3RoIGluIHVzZXIgc3BhY2UgYW5kIGtlcm5lbCBzcGFjZT8gV2hhdCBmaWVsZHMgZG8gdGhleSBjb250YWluPyBIb3cgYXJlIHRoZXNlIHZhbHVlcyBpbnRlcnByZXRlZCBieSB0aGUgS1ZNIGNvcmU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3MsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGZvcm1hdCBzdHJpbmcgYnVncz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBJLCBmb3IgaW5zdGFuY2UsIHNldCBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24gYXMgZGV2aWNlIG1lbW9yeS4gVGhlIEtWTSBjb3JlIG5lZWRzIHRvIGNvbW11bmljYXRlIHRob3NlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlIE1NVSBhbmQgZGV2aWNlIGVtdWxhdGlvbiBsYXllcnMuXG5cbkknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW50ZXJuYWwgbG9ja2luZyBtZWNoYW5pc21zIHRvby4gTWVtb3J5IGF0dHJpYnV0ZXMgbGlrZWx5IHRvdWNoIHZhcmlvdXMgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgc28gdGhlIGtlcm5lbCBuZWVkcyB0byBlbmZvcmNlIGNvbmN1cnJlbmN5IGNvbnRyb2wgdG8gcHJldmVudCBjb3JydXB0aW9uLiBBcmUgc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1UgdXNlZD8gSWYgc28sIHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoZXNlIGxvY2tzPyBBcmUgdGhleSBmaW5lLWdyYWluZWQgb3IgY29hcnNlLWdyYWluZWQ/IEFueSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBvciBwcmlvcml0eSBpbnZlcnNpb24/IEkgc2hvdWxkIGFsc28gbG9vayBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGVsZW1lbnRzIG9mIHRoZSBoeXBlcnZpc29yLiBIb3cgZG9lcyB0aGlzIGFmZmVjdCBwYWdlIHRhYmxlcz8gV2hhdCBoYXBwZW5zIHdpdGggTlVNQSBub2Rlcz9cblxuRmluYWxseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCBjYWxsIGZhaWxzPyBEb2VzIGl0IHJldHVybiBhIHNwZWNpZmljIGVycm9yIGNvZGU/IEhvdyBhcmUgdGhlc2UgZXJyb3JzIGhhbmRsZWQgYnkgdXNlcnNwYWNlPyBBcmUgdGhlIGVycm9ycyBzdWZmaWNpZW50bHkgaW5mb3JtYXRpdmU/IEFyZSB0aGVyZSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3M/IFdoYXQgYXJlIHRoZSByZWNvdmVyeSBwYXRocyBhZnRlciBhbiBlcnJvcj8gVGhlIGVycm9yIGhhbmRsaW5nIGlzIGNyaXRpY2FsIGJlY2F1c2UgbWVtb3J5IHNldHRpbmcgaXMgYSB2ZXJ5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLlxuXG5JbiBzdW1tYXJ5LCBteSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb250cm9sIGZsb3csIGFyZ3VtZW50IHZhbGlkYXRpb24sIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcgb2YgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGFzIGl0J3MgY2FsbGVkIGZyb20gYGt2bV92bV9pb2N0bGAuIEkgd2FudCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgaW5zdGFiaWxpdHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQsIGFuZCBJJ20gdHJlYXRpbmcgdGhpcyBsaWtlIGEgcmV2ZXJzZSBlbmdpbmVlcmluZyBwcm9qZWN0IG9mIHNvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjEuMTk0OTgyNDkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0MTA6XFx0XFx0XFx0YnJlYWs7XFxuNTQxMTpcXHRcXHR9XFxuNTQxMjpcXHQjZW5kaWYgLyogQ09ORklHX0hBVkVfS1ZNX0lSUV9ST1VUSU5HICovXFxuNTQxMzpcXHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuNTQxNDpcXHRcXHRjYXNlIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVM6IHtcXG41NDE1OlxcdFxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgYXR0cnM7XFxuNTQxNjpcXHRcXG41NDE3OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjU0MTg6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZhdHRycywgYXJncCwgc2l6ZW9mKGF0dHJzKSkpXFxuNTQxOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41NDIwOlxcdFxcbjU0MjE6XFx0XFx0XFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoa3ZtLCBcXHUwMDI2YXR0cnMpO1xcbjU0MjI6XFx0XFx0XFx0YnJlYWs7XFxuNTQyMzpcXHRcXHR9XFxuNTQyNDpcXHQjZW5kaWYgLyogQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTICovXFxuNTQyNTpcXHRcXHRjYXNlIEtWTV9DUkVBVEVfREVWSUNFOiB7XFxuNTQyNjpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX2NyZWF0ZV9kZXZpY2UgY2Q7XFxuNTQyNzpcXHRcXG41NDI4OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjU0Mjk6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjZCwgYXJncCwgc2l6ZW9mKGNkKSkpXFxuNTQzMDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG41NDMxOlxcdFxcbjU0MzI6XFx0XFx0XFx0ciA9IGt2bV9pb2N0bF9jcmVhdGVfZGV2aWNlKGt2bSwgXFx1MDAyNmNkKTtcXG41NDMzOlxcdFxcdFxcdGlmIChyKVxcbjU0MzQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjIxLjE5NTIxNDQ2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjU1NjM1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEtWTSBNZW1vcnkgQXR0cmlidXRlIFRob3VnaHRzKipcblxuQWxyaWdodCwgSSdtIGRpZ2dpbmcgaW50byBga3ZtX3ZtX2lvY3RsYCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBcIkNhbiB3ZSBldmVuIGdldCBoZXJlP1wiIE9mIGNvdXJzZSB3ZSBjYW4hIFRoaXMgaXMgS1ZNIHdlJ3JlIHRhbGtpbmcgYWJvdXQsIGEgY29yZSBjb21wb25lbnQgb2YgTGludXggdmlydHVhbGl6YXRpb24uIEEgdXNlciBwcm9jZXNzIGhhcyB0byBvcGVuIGAvZGV2L2t2bWAsIGNyZWF0ZSBhIHZpcnR1YWwgbWFjaGluZSB1c2luZyBgaW9jdGwoa3ZtX2ZkLCBLVk1fQ1JFQVRFX1ZNLCAuLi4pYC4gVGhlbiwgYW5kIG9ubHkgdGhlbiwgb24gdGhlIFZNIGZpbGUgZGVzY3JpcHRvciwgY2FuIHlvdSBsZWdpdGltYXRlbHkgY2FsbCBgaW9jdGxgIHdpdGggYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgISBHb3QgaXQuXG5cbk5vdywgdG8gZ2V0IGRvd24gdG8gZGV0YWlscywgSSB3YW50IHRvIGNsYXJpZnkgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBhbmQsIGZvciB0aGF0IG1hdHRlciwgd2hhdCBpcyB0aGUgaW1wYWN0IG9mIGl0LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIHVzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2NCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjIzLjQ1MDg1MjU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM3MTQ0NTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9LY29uZmlnPTEwMD1jb25maWcgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDItXFxudmlydC9rdm0vS2NvbmZpZzoxMDM6Y29uZmlnIEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0vS2NvbmZpZy0xMDQtICAgICAgIGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6MjUuMjg4MDA0MTEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1ODA5Njc5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgU2VsZWN0aW9uIG9mIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gTXkgZWFybGllciBncmVwIG91dHB1dCBnYXZlIG1lIGEgc3RhcnRpbmcgcG9pbnQsIHNvIEkga25vdyBpdCdzIGJlaW5nIHNlbGVjdGVkIGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZTpcblxuKiAgIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBvbiBgS1ZNX1g4NmAgYW5kIGBYODZfNjRgLlxuKiAgIGBLVk1fSU5URUxfVERYYCBpZiBgSU5URUxfVERYX0hPU1RgIGlzIGVuYWJsZWQuXG4qICAgYEtWTV9BTURfU0VWYCwgd2hpY2ggc2VlbXMgdG8gYmUgbGlua2VkIHRvIGBBUkNIX0hBU19DQ19QTEFURk9STWAuXG5cbk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBnbyBiYWNrIGludG8gYGFyY2gveDg2L2t2bS9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdG8gZ2V0IHRoZSBwcmVjaXNlIGRlcGVuZGVuY3kgY2hhaW4uIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjI5Ljg2ODk3NjQwOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIuXFxuICA4MjpcXHRcXG4gIDgzOlxcdGNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuICA4NDpcXHRcXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuICA4NTpcXHRcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbiAgODc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuICA4ODpcXHRcXHRoZWxwXFxuICA4OTpcXHRcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNcy4gIEN1cnJlbnRseSwgc29mdHdhcmUtXFxuICA5MDpcXHRcXHQgIHByb3RlY3RlZCBWTXMgYXJlIHB1cmVseSBhIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHZlaGljbGUgZm9yXFxuICA5MTpcXHRcXHQgIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQuICBBdHRlbXB0aW5nIHRvIHJ1biBhIFxcXCJyZWFsXFxcIiBWTSB3b3JrbG9hZCBhcyBhXFxuICA5MjpcXHRcXHQgIHNvZnR3YXJlLXByb3RlY3RlZCBWTSB3aWxsIGZhaWwgbWlzZXJhYmx5LlxcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFxcXCJOXFxcIi5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0Y29uZmlnIEtWTV9JTlRFTFxcbiAgOTc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuICA5ODpcXHRcXHRkZXBlbmRzIG9uIEtWTSBcXHUwMDI2XFx1MDAyNiBJQTMyX0ZFQVRfQ1RMXFxuICA5OTpcXHRcXHRzZWxlY3QgWDg2X0ZSRUQgaWYgWDg2XzY0XFxuIDEwMDpcXHRcXHRoZWxwXFxuIDEwMTpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIEtWTSBvbiBwcm9jZXNzb3JzIGVxdWlwcGVkIHdpdGggSW50ZWwncyBWVFxcbiAxMDI6XFx0XFx0ICBleHRlbnNpb25zLCBhLmsuYS4gVmlydHVhbCBNYWNoaW5lIEV4dGVuc2lvbnMgKFZNWCkuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDEwNTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGt2bS1pbnRlbC5cXG4gMTA2OlxcdFxcbiAxMDc6XFx0Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxcbiAxMDg6XFx0ICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4gMTA5OlxcdCAgICAgICAgZGVwZW5kcyBvbiBLVk1fSU5URUwgXFx1MDAyNlxcdTAwMjYgRVhQRVJUXFxuIDExMDpcXHQgICAgICAgIGhlbHBcXG4gMTExOlxcdCAgICAgICAgICBDaGVja3MgdGhhdCBLVk0ncyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQgY29kZSB3aWxsIG5vdCBpbmNvcnJlY3RseVxcbiAxMTI6XFx0ICAgICAgICAgIGxldCBndWVzdHMgcmVjZWl2ZSBhIHZpcnR1YWxpemF0aW9uIGV4Y2VwdGlvbi4gIFZpcnR1YWxpemF0aW9uXFxuIDExMzpcXHQgICAgICAgICAgZXhjZXB0aW9ucyB3aWxsIGJlIHRyYXBwZWQgYnkgdGhlIGh5cGVydmlzb3IgcmF0aGVyIHRoYW4gaW5qZWN0ZWRcXG4gMTE0OlxcdCAgICAgICAgICBpbiB0aGUgZ3Vlc3QuXFxuIDExNTpcXHRcXG4gMTE2OlxcdCAgICAgICAgICBOb3RlOiBzb21lIENQVXMgYXBwZWFyIHRvIGdlbmVyYXRlIHNwdXJpb3VzIEVQVCBWaW9sYXRpb25zICNWRXNcXG4gMTE3OlxcdCAgICAgICAgICB0aGF0IHRyaWdnZXIgS1ZNJ3MgV0FSTiwgaW4gcGFydGljdWxhciB3aXRoIGVwdGFkPTAgYW5kL29yIG5lc3RlZFxcbiAxMTg6XFx0ICAgICAgICAgIHZpcnR1YWxpemF0aW9uLlxcbiAxMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjI5Ljg2OTA3MDc4OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDcxMjkwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgS2NvbmZpZyBmb3IgQU1EIFNFViBTdXBwb3J0KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIldlIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nLlwiIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCdzIHN1cHBvcnQgZm9yIEFNRCdzIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgd2l0aGluIHRoZSBLVk0gZnJhbWV3b3JrLiBJIG5lZWQgdG8gY29tcHJlaGVuc2l2ZWx5IGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCByZWxhdGUgdG8gdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGUgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoaW4gdGhlIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZGl2ZSBpbiB0aGVyZSB0byBjb25maXJtIHdoZXRoZXIgdGhlIGBLVk1fQU1EX1NFVmAgY29uZmlnIG9wdGlvbiBoYXMgYmVlbiBjb3JyZWN0bHkgZW5hYmxlZCBvciBwcm9wZXJseSBkZWZpbmVkLiBBbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiB0aGUgYEtjb25maWdgIGZpbGVzIG11c3QgYmUgdGhvcm91Z2hseSByZXZpZXdlZC4gVGhpcyBkZXRhaWxlZCBjaGVjayB3aWxsIGhlbHAgbWUgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSByZWFkeSB0byBwcm9jZWVkIHdpdGggbW9yZSB0ZXN0aW5nIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjMxLjk0MDM2Mzk1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFxuIDE0NjpcXHRjb25maWcgS1ZNX0FNRFxcbiAxNDc6XFx0XFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4gMTQ4OlxcdFxcdGRlcGVuZHMgb24gS1ZNIFxcdTAwMjZcXHUwMDI2IChDUFVfU1VQX0FNRCB8fCBDUFVfU1VQX0hZR09OKVxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gQU1EIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgQU1ELVZcXG4gMTUxOlxcdFxcdCAgKFNWTSkgZXh0ZW5zaW9ucy5cXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTU0OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQga3ZtLWFtZC5cXG4gMTU1OlxcdFxcbiAxNTY6XFx0Y29uZmlnIEtWTV9BTURfU0VWXFxuIDE1NzpcXHRcXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbiAxNTg6XFx0XFx0ZGVmYXVsdCB5XFxuIDE1OTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9BTUQgXFx1MDAyNlxcdTAwMjYgWDg2XzY0XFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfU1BfUFNQIFxcdTAwMjZcXHUwMDI2ICEoS1ZNX0FNRD15IFxcdTAwMjZcXHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXFxuIDE2MTpcXHRcXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG4gMTYyOlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbiAxNjM6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXFxuIDE2NDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cXG4gMTY1OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxcbiAxNjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxcbiAxNjc6XFx0XFx0aGVscFxcbiAxNjg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXFxuIDE2OTpcXHRcXHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MDpcXHRcXHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxcbiAxNzE6XFx0XFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxcbiAxNzI6XFx0XFxuIDE3MzpcXHRjb25maWcgS1ZNX0lPQVBJQ1xcbiAxNzQ6XFx0XFx0Ym9vbCBcXFwiSS9PIEFQSUMsIFBJQywgYW5kIFBJVCBlbXVsYXRpb25cXFwiXFxuIDE3NTpcXHRcXHRkZWZhdWx0IHlcXG4gMTc2OlxcdFxcdGRlcGVuZHMgb24gS1ZNX1g4NlxcbiAxNzc6XFx0XFx0aGVscFxcbiAxNzg6XFx0XFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gdG8gZW11bGF0ZSBhbiBJL08gQVBJQywgUElDLCBhbmQgUElULCBpLmUuXFxuIDE3OTpcXHRcXHQgIGZvciBmdWxsIGluLWtlcm5lbCBBUElDIGVtdWxhdGlvbi5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxODI6XFx0XFxuIDE4MzpcXHRjb25maWcgS1ZNX1NNTVxcbiAxODQ6XFx0XFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjMxLjk0MDQ0MjYxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzI0NjM0MTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTGFuZHNjYXBlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBoYW5kbGVzIG1lbW9yeSBhdHRyaWJ1dGVzIGFuZCBob3cgdGhleSdyZSBzZWxlY3RlZC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbnMgc2hvdyB0aGF0IGJvdGggYEtWTV9TV19QUk9URUNURURfVk1gIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBjb25maWd1cmVkIHRvIHNlbGVjdCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBzZXJ2ZXMgYXMgYSBzb3J0IG9mIGNvbW1vbiBncm91bmQgZm9yIGRpZmZlcmVudCBzZWN1cml0eSBtb2RlbHMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlY2hub2xvZ2llcy4gTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaDsgSSBuZWVkIHRvIGRldGVybWluZSBpZiBvdGhlciBhcmNoaXRlY3R1cmVzIG9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxzbyB1dGlsaXplIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFRoZSBnb2FsIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHdoaWNoIGNvbmZpZ3VyYXRpb25zIHNoYXJlIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzI0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjozNC42NjUwODEwNjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjI1MzU1ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0LipLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODYtXFx0ZGVwZW5kcyBvbiBLVk1fWDg2IFxcdTAwMjZcXHUwMDI2IFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjg3OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg4LVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM3LVxcdGRlcGVuZHMgb24gSU5URUxfVERYX0hPU1RcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzg6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM5LVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUE9QVUxBVEVcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTE1Nj1jb25maWcgS1ZNX0FNRF9TRVZcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2MS1cXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNjI6XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTYzLVxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fQ09OVkVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjozNy4wODc2MzMwMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzU5NDI4NjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEtWTV9YODZgLiBNeSB1c3VhbCBhcHByb2FjaCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbGwgc2VhcmNoIGZvciBjb25maWd1cmF0aW9uIHN5bWJvbHMgcmVsYXRlZCB0byBLVk0sIGZvY3VzaW5nIG9uIGBjb25maWcgS1ZNYCBhbmQgYGNvbmZpZyBLVk1fWDg2YC4gTXkgZ3Vlc3MgaXMgdGhhdCB0aGUga2V5IGRlcGVuZGVuY2llcyBhcmUgbGFpZCBvdXQgd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoYXQgZmlsZSByZXZlYWxzLiBUaW1lIHRvIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQwLjY4MTkyMjM5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuICAgOTpcXHRcXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG4gIDEwOlxcdFxcdGRlZmF1bHQgeVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1biBvdGhlclxcbiAgMTM6XFx0XFx0ICBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDE0OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNX1g4NlxcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbiAgMjI6XFx0XFx0c2VsZWN0IEtWTV9DT01NT05cXG4gIDIzOlxcdFxcdHNlbGVjdCBLVk1fRUxJREVfVExCX0ZMVVNIX0lGX1lPVU5HXFxuICAyNDpcXHRcXHRzZWxlY3QgS1ZNX01NVV9MT0NLTEVTU19BR0lOR1xcbiAgMjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcXG4gIDI2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QRk5DQUNIRVxcbiAgMjc6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfVFNPXFxuICAyODpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyOTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX0JZUEFTU1xcbiAgMzA6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAzMjpcXHRcXHRzZWxlY3QgVkhPU1RfVEFTS1xcbiAgMzM6XFx0XFx0c2VsZWN0IEtWTV9BU1lOQ19QRlxcbiAgMzQ6XFx0XFx0c2VsZWN0IFVTRVJfUkVUVVJOX05PVElGSUVSXFxuICAzNTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDM2OlxcdFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuICAzNzpcXHRcXHRzZWxlY3QgUEVSRl9FVkVOVFNcXG4gIDM4OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UU1xcbiAgMzk6XFx0XFx0c2VsZWN0IFBFUkZfR1VFU1RfTUVESUFURURfUE1VXFxuICA0MDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICA0MTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVFxcbiAgNDI6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX05PX1BPTExcXG4gIDQzOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgNDQ6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgNDU6XFx0XFx0c2VsZWN0IEtWTV9WRklPXFxuICA0NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUE1fTk9USUZJRVIgaWYgUE1cXG4gIDQ3OlxcdFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbiAgNDg6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG4gIDQ5OlxcdFxcdHNlbGVjdCBLVk1fV0VSUk9SIGlmIFdFUlJPUlxcbiAgNTA6XFx0XFx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRCBpZiBYODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDAuNjgyMDA5NDc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3NDQ5NzQ5OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgS1ZNIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBLVk0gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb24geDg2XzY0LCBhbmQgaXQgbG9va3MgbGlrZSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0gKHNwZWNpZmljYWxseSBLVk0sIG9yIEtWTV9JTlRFTC9LVk1fQU1EKSwgYW5kIHdlIGVuYWJsZSBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAsIHdoaWNoIGl0c2VsZiBoaW5nZXMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgIGJlaW5nIGluIHBsYWNlLCB3ZSBhbHNvIGdldCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIHNlbGVjdGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC4gQW5kIGlmIGBLVk1fQU1EYCBpcyBlbmFibGVkLCB0aGVuIGBLVk1fQU1EX1NFVmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFzIGxvbmcgYXMgYENSWVBUT19ERVZfU1BfUFNQYCBpcyBwcmVzZW50LiBBbmQganVzdCB0byBiZSBjbGVhciwgYEtWTV9TV19QUk9URUNURURfVk1gIGlzIGNvbmZpZ3VyZWQgdW5kZXIgdGhlIGBWSVJUVUFMSVpBVElPTmAgbWVudS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBkb2VzIHN5emthbGxlciB0YXJnZXQgS1ZNPyBZZXMsIGl0IGRvZXMhIFRoYXQncyBleGNlbGxlbnQuIEtWTSBpcyBvbmUgb2YgdGhlIG1vc3QgZnJlcXVlbnRseSBmdXp6ZWQgc3Vic3lzdGVtcyBieSBzeXprYWxsZXIuIEknbSBzZWVpbmcgaXQgdGFyZ2V0aW5nIGAvZGV2L2t2bWAsIGFuZCB2YXJpb3VzIGlvY3RscyBsaWtlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYCwgYEtWTV9DUkVBVEVfVk1gLCBhbmQgb3RoZXJzLlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGFuZCBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgZGVmaW5lZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zIG9yIGtlcm5lbCBjb2RlLCBidXQgSSBiZXQgSSdsbCBlbmQgdXAgbG9va2luZyBpbiB0aGUga2VybmVsIGhlYWRlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODk4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NDQuNDI2OTg2ODU5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQxNzY5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzODc9aXMgJzAnIGZvciBhbGwgZ2Zucy4gIFVzZXJzcGFjZSBjYW4gY29udHJvbCB3aGV0aGVyIG1lbW9yeSBpcyBzaGFyZWQvcHJpdmF0ZSBieVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2Mzg4OnRvZ2dsaW5nIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEUgdmlhIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgYXMgbmVlZGVkLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Mzg5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTYzOTQ9UmV0dXJucyAtRUlOVkFMIGlmIGNhbGxlZCBvbiBhIHByb3RlY3RlZCBWTS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjM5NS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjM5Njo0LjE0MSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTYzOTctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0MDQtXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0MDU6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBhbGxvd3MgdXNlcnNwYWNlIHRvIHNldCBtZW1vcnkgYXR0cmlidXRlcyBmb3IgYSByYW5nZVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDA2LW9mIGd1ZXN0IHBoeXNpY2FsIG1lbW9yeS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3Q9NTA1PUtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEUgYXR0cmlidXRlIHNldCBpbiBhZHZhbmNlLiBTZWUgdGhlIGRvY3VtZW50YXRpb25cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9hbWQtbWVtb3J5LWVuY3J5cHRpb24ucnN0OjUwNjpmb3IgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgYXNwZWN0LlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0veDg2L2FtZC1tZW1vcnktZW5jcnlwdGlvbi5yc3QtNTA3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdD0xNjE9Tm90ZSwgYmVmb3JlIGNhbGxpbmcgdGhpcyBzdWIgY29tbWFuZCwgbWVtb3J5IGF0dHJpYnV0ZSBvZiB0aGUgcmFuZ2VcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2Mi1bZ3BhLCBncGEgKyBucl9wYWdlc10gbmVlZHMgdG8gYmUgcHJpdmF0ZS4gIFVzZXJzcGFjZSBjYW4gdXNlXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS94ODYvaW50ZWwtdGR4LnJzdDoxNjM6S1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUyB0byBzZXQgdGhlIGF0dHJpYnV0ZS5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL3g4Ni9pbnRlbC10ZHgucnN0LTE2NC1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjQyMT1zdGF0aWMgaW50IHNucF9sYXVuY2hfdXBkYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYwLVxcdCAqICAgMSkgVGhlIGJhY2tpbmcgbWVtc2xvdCBpcyBhIHZhbGlkIHByaXZhdGUgbWVtc2xvdC5cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI0NjE6XFx0ICogICAyKSBUaGUgR0ZOIGhhcyBiZWVuIHNldCB0byBwcml2YXRlIHZpYSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDYyLVxcdCAqICAgICAgYmVmb3JlaGFuZC5cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjQ2Ny1cXHQgKiBmYXVsdHMgaWYgdGhlcmUncyBhIHJhY2UgYmV0d2VlbiBhIGZhdWx0IGFuZCBhbiBhdHRyaWJ1dGUgdXBkYXRlIHZpYVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjQ2ODpcXHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTLCBhbmQgYSBzaW1pbGFyIGFwcHJvYWNoIGNvdWxkIGJlIHV0aWxpemVkXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNDY5LVxcdCAqIGhlcmUuIEhvd2V2ZXIsIGt2bS1cXHUwMDNlc2xvdHNfbG9jayBndWFyZHMgYWdhaW5zdCBib3RoIHRoaXMgYXMgd2VsbCBhc1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTU2MD1zdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTU3OC0gKiBtZW1fYXR0cl9hcnJheSBwZXIgVk0gKH4zMDAgTWlCIG9mIHhhX25vZGVzIGF0IDJeMjUpLiAgV2l0aG91dCBpdCxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6NTc5OiAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtNTgwLSAqIGtlcm5lbCBtZW1vcnkgcGVyIEdGTikgb24gR0ZOcyB3aXRoIG5vIGJhY2tpbmcgbWVtb3J5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTM9aW50IGt2bV9hcmNoX2dtZW1fbWFrZV9wcml2YXRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBrdm1fcGZuX3QgcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MzQtICogaGVsZCBzbyB0aGF0IGNhbGxlci1lbmZvcmNlZCBpbnZhcmlhbnRzIHJlZ2FyZGluZyB0aGUgZXhwZWN0ZWQgbWVtb3J5XFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MzU6ICogYXR0cmlidXRlcyBvZiB0aGUgR1BBIHJhbmdlIGRvIG5vdCByYWNlIHdpdGggS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUy5cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYzNi0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MTg9c3RydWN0IGt2bV9zdGF0c19kZXNjIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ2LS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0NzojZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGQyLCBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzKVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ4LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2MTQ9c3RydWN0IGt2bV9zdGF0c19kZXNjIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQyLS8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVMgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY0MzojZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGQyLCBzdHJ1Y3Qga3ZtX21lbW9yeV9hdHRyaWJ1dGVzKVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjQ0LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaD00MjE9c3RhdGljIGlubGluZSB2b2lkIHZtX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgZ3BhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzEtXFx0LypcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oOjQzMjpcXHQgKiBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIG92ZXJ3cml0ZXMgX2FsbF8gYXR0cmlidXRlcy4gIFRoZXNlIGZsb3dzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzMtXFx0ICogbmVlZCBzaWduaWZpY2FudCBlbmhhbmNlbWVudHMgdG8gc3VwcG9ydCBtdWx0aXBsZSBhdHRyaWJ1dGVzLlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaC00MzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaDo0Mzg6XFx0dm1faW9jdGwodm0sIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMsIFxcdTAwMjZhdHRyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oLTQzOS19XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTUyMzI9c3RhdGljIGxvbmcga3ZtX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy01NDEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjU0MTQ6XFx0Y2FzZSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTOiB7XFxudmlydC9rdm0va3ZtX21haW4uYy01NDE1LVxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X2F0dHJpYnV0ZXMgYXR0cnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjQ2LjA2ODc2NTQzNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODkyNzI5Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtWTSBNZW1vcnkgQXR0cmlidXRlIEhhcmRlbmluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSBnaXQgY29tbWl0IGRldGFpbHMgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRyb2R1Y2luZyBhIGhhcmRlbmluZyBib3VuZCBmb3IgYG1lbV9hdHRyX2FycmF5YC4gRmlyc3QsIGl0IGluaXRpYWxpemVzIHRoaXMgYXJyYXkgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYXQgVk0gY3JlYXRpb24gYW5kIGFsc28gaW5pdGlhbGl6ZXMgYGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnRgIHRvIHplcm8uXG5cblRoZW4sIGl0IGltcGxlbWVudHMgYSBuZXcgZnVuY3Rpb24sIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHRvIGNvdW50IHRoZSBlbnRyaWVzIGluIGBtZW1fYXR0cl9hcnJheWAuIEkgc2VlIGl0IHVzZXMgYHhhc19mb3JfZWFjaGAgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSB4YXJyYXkuIFRoYXQncyBmaW5lLCBidXQgd2FpdCBhIHNlY29uZC4uLiBpdCBjYWxscyBgeGFzX3BhdXNlYCB3aXRoaW4gdGhlIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AgY29udGV4dC4gKipUaGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLioqIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGxvY2tkZXAgcHJvYmxlbXMsIGFueSBidWdzIGx1cmtpbmcgaW4gdGhlIHhhcnJheSB0cmF2ZXJzYWwgbG9naWMsIG9yIGV2ZW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBEb1MgdnVsbmVyYWJpbGl0aWVzLCBvciBSQ1UtcmVsYXRlZCBwcm9ibGVtcyBzdGVtbWluZyBmcm9tIHRoaXMuIEl0J3MgY2FsbGluZyBgeGFzX2Zvcl9lYWNoYCAqd2hpbGUgaG9sZGluZyogYSBsb2NrOyB0aGF0IGFsd2F5cyByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5GdXJ0aGVyLCB0aGVyZSdzIGEgbmV3IGNoZWNrIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCB0aGF0IHJldHVybnMgYC1FTk9TUENgIGlmIHRoZSBudW1iZXIgb2YgR0ZOUyBleGNlZWRzIGEgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgbGltaXQuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHJlc291cmNlIGxpbWl0cy4gVGhlIGB4YV9pbml0YCBmdW5jdGlvbiBpcyBjaGFuZ2VkIHRvIGB4YV9pbml0X2ZsYWdzYCBhbmQgYG1lbV9hdHRyX2dmbl9jb3VudGAgaXMgdHJhY2tlZC4gQW5kIHRoaXMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgbWVtb3J5IGF0dHJpYnV0ZXMgKnVuZGVyIHRoZSBzYW1lIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AqLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYmVjYXVzZSB0aGlzIGlzIEtWTSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGFjY2Vzc2VkIHZpYSBgaW9jdGwodm1fZmQsIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMpYC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgYWxsIHdvcmtzIGFzIGV4cGVjdGVkIHVuZGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHNldHVwcy4gQ2FuIHRoaXMgcnVuIGluIFFFTVUgb24gYW1kNjQ/IFllcywgaXQgbG9va3MgbGlrZSBRRU1VIHdpdGggYSBndWVzdCBrZXJuZWwgaGF2aW5nIGBDT05GSUdfS1ZNYCwgYW5kIGBDT05GSUdfS1ZNX1NXX1BST1RFQ1RFRF9WTT15YCBvciBgQ09ORklHX0tWTV9JTlRFTD15YC9gQ09ORklHX0tWTV9BTUQ9eWAgaXMgdGhlIHVzdWFsIHNldHVwLiBLVk0gdGVzdHMgYW5kIHN5emthbGxlciBmdXp6aW5nIGlzIHR5cGljYWxseSBkb25lIHdpdGhpbiBRRU1VIHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uIG9yIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbkJ1dCBJJ20gbm93IGN1cmlvdXM6IGNhbiBLVk0gY3JlYXRlIHRoZXNlIHNvZnR3YXJlLXByb3RlY3RlZCBWTXMgd2l0aG91dCByZWx5aW5nIG9uIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uPyBMZXQncyBjaGVjayBmb3IgYEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNYCB0byBiZSBzdXJlLCBvciBtb3JlIGJyb2FkbHksIGxldCdzIHNlYXJjaCBmb3IgdXNhZ2VzIG9mIGBoYXNfcHJpdmF0ZV9tZW1gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1Mi45NjE0OTc3NTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM1NDY4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTk1MTI9bWVhbnMgdGhlIFZNIHR5cGUgd2l0aCB2YWx1ZSBAbiBpcyBzdXBwb3J0ZWQuICBQb3NzaWJsZSB2YWx1ZXMgb2YgQG4gYXJlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE0LSAgI2RlZmluZSBLVk1fWDg2X0RFRkFVTFRfVk1cXHQwXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0Ojk1MTU6ICAjZGVmaW5lIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNXFx0MVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTE2LSAgI2RlZmluZSBLVk1fWDg2X1NFVl9WTVxcdDJcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NTIwLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NTIxOk5vdGUsIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGlzIGN1cnJlbnRseSBvbmx5IGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZy5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTUyMjpEbyBub3QgdXNlIEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIGZvciBcXFwicmVhbFxcXCIgVk1zLCBhbmQgZXNwZWNpYWxseSBub3QgaW5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtOTUyMy1wcm9kdWN0aW9uLiAgVGhlIGJlaGF2aW9yIGFuZCBlZmZlY3RpdmUgQUJJIGZvciBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zIGlzXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oPTkyNz1zdHJ1Y3Qga3ZtX2h5cGVydl9ldmVudGZkIHtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgtOTcwLSNkZWZpbmUgS1ZNX1g4Nl9ERUZBVUxUX1ZNXFx0MFxcbmFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg6OTcxOiNkZWZpbmUgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cXHQxXFxuYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzItI2RlZmluZSBLVk1fWDg2X1NFVl9WTVxcdFxcdDJcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NjU2Nz1pbnQgbm9pbmxpbmUga3ZtX21tdV9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgY3IyX29yX2dwYSwgdTY0IGVycm9yX2NvZGUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTY1ODUtXFx0ICAgICEoZXJyb3JfY29kZSBcXHUwMDI2IFBGRVJSX1JTVkRfTUFTSykgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjY1ODY6XFx0ICAgIHZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bV90eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy02NTg3LVxcdCAgICBrdm1fbWVtX2lzX3ByaXZhdGUodmNwdS1cXHUwMDNla3ZtLCBncGFfdG9fZ2ZuKGNyMl9vcl9ncGEpKSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9Mjk1NT12b2lkIHNldl92bV9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjk1OC1cXHRjYXNlIEtWTV9YODZfREVGQVVMVF9WTTpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI5NTk6XFx0Y2FzZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTTpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI5NjAtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9Njk5OT1pbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTcxMjQtXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tWTV9TV19QUk9URUNURURfVk0pIFxcdTAwMjZcXHUwMDI2IHRkcF9tbXVfZW5hYmxlZClcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzEyNTpcXHRcXHRrdm1fY2Fwcy5zdXBwb3J0ZWRfdm1fdHlwZXMgfD0gQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzEyNi1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05ODQzPWludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTItXFx0a3ZtLVxcdTAwM2VhcmNoLmhhc19wcml2YXRlX21lbSA9XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjk4NTM6XFx0XFx0KHR5cGUgPT0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODU0LVxcdC8qIERlY2lkZWQgYnkgdGhlIHZlbmRvciBjb2RlIGZvciBvdGhlciBWTSB0eXBlcy4gICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTk4NTUtXFx0a3ZtLVxcdTAwM2VhcmNoLnByZV9mYXVsdF9hbGxvd2VkID1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTg1NjpcXHRcXHR0eXBlID09IEtWTV9YODZfREVGQVVMVF9WTSB8fCB0eXBlID09IEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNO1xcbmFyY2gveDg2L2t2bS94ODYuYy05ODU3LVxcdGt2bS1cXHUwMDNlYXJjaC5kaXNhYmxlZF9xdWlya3MgPSBrdm1fY2Fwcy5pbmFwcGxpY2FibGVfcXVpcmtzIFxcdTAwMjYga3ZtX2NhcHMuc3VwcG9ydGVkX3F1aXJrcztcXG4tLVxcbnRvb2xzL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmg9OTI3PXN0cnVjdCBrdm1faHlwZXJ2X2V2ZW50ZmQge1xcbi0tXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaC05NzAtI2RlZmluZSBLVk1fWDg2X0RFRkFVTFRfVk1cXHQwXFxudG9vbHMvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaDo5NzE6I2RlZmluZSBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTVxcdDFcXG50b29scy9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oLTk3Mi0jZGVmaW5lIEtWTV9YODZfU0VWX1ZNXFx0XFx0Mlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jPTIyMD1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTIyNS0jaWZkZWYgX194ODZfNjRfX1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoyMjY6XFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNLCBmYWxzZSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjIyNzpcXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0yMjgtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTM0Nj1zdGF0aWMgdm9pZCB0ZXN0X2ludmFsaWRfbWVtb3J5X3JlZ2lvbl9mbGFncyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy0zNTctI2lmZGVmIF9feDg2XzY0X19cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjM1ODpcXHRpZiAoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzozNTk6XFx0XFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtMzYwLVxcdGVsc2VcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmM9NDY3PXN0YXRpYyB2b2lkIHRlc3RfYWRkX3ByaXZhdGVfbWVtb3J5X3JlZ2lvbih2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00NzMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0NzQ6XFx0dm0gPSB2bV9jcmVhdGVfYmFyZWJvbmVzX3R5cGUoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMtNDc1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy00ODItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo0ODM6XFx0dm0yID0gdm1fY3JlYXRlX2JhcmVib25lc190eXBlKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTQ4NC1cXHRtZW1mZCA9IHZtX2NyZWF0ZV9ndWVzdF9tZW1mZCh2bTIsIE1FTV9SRUdJT05fU0laRSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTUwMz1zdGF0aWMgdm9pZCB0ZXN0X2FkZF9vdmVybGFwcGluZ19wcml2YXRlX21lbW9yeV9yZWdpb25zKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTUxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jOjUxMTpcXHR2bSA9IHZtX2NyZWF0ZV9iYXJlYm9uZXNfdHlwZShLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy01MTItXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jPTYyMz1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYy02NDQtXFx0aWYgKGt2bV9oYXNfY2FwKEtWTV9DQVBfR1VFU1RfTUVNRkQpIFxcdTAwMjZcXHUwMDI2XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYzo2NDU6XFx0ICAgIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFxcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSkpIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jLTY0Ni1cXHRcXHR0ZXN0X2FkZF9wcml2YXRlX21lbW9yeV9yZWdpb24oKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jPTM2OT1zdGF0aWMgdm9pZCB0ZXN0X21lbV9jb252ZXJzaW9ucyhlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLCB1MzIgbnJfdmNwdXMsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy0zODYtXFx0XFx0Lm1vZGUgPSBWTV9NT0RFX0RFRkFVTFQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmM6Mzg3OlxcdFxcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9jb252ZXJzaW9uc190ZXN0LmMtMzg4LVxcdH07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYz00NTA9aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fY29udmVyc2lvbnNfdGVzdC5jLTQ1Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYzo0NTc6XFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9WTV9UWVBFUykgXFx1MDAyNiBCSVQoS1ZNX1g4Nl9TV19QUk9URUNURURfVk0pKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2NvbnZlcnNpb25zX3Rlc3QuYy00NTgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9NDI9Y29uc3Qgc3RydWN0IHZtX3NoYXBlIHByb3RlY3RlZF92bV9zaGFwZSA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmMtNDMtXFx0Lm1vZGUgPSBWTV9NT0RFX0RFRkFVTFQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjQ0OlxcdC50eXBlID0gS1ZNX1g4Nl9TV19QUk9URUNURURfVk0sXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTQ1LX07XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3ByaXZhdGVfbWVtX2t2bV9leGl0c190ZXN0LmM9MTEzPWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jLTExNC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9wcml2YXRlX21lbV9rdm1fZXhpdHNfdGVzdC5jOjExNTpcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1ZNX1RZUEVTKSBcXHUwMDI2IEJJVChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSkpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvcHJpdmF0ZV9tZW1fa3ZtX2V4aXRzX3Rlc3QuYy0xMTYtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jPTc2PXZvaWQgdGVzdF92bV90eXBlcyh2b2lkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYy04Ny1cXHRcXHRcXHQgICBcXFwiVk0gdHlwZSBpcyBLVk1fWDg2X0RFRkFVTFRfVk1cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg4OlxcdGlmIChrdm1fY2hlY2tfY2FwKEtWTV9DQVBfVk1fVFlQRVMpIFxcdTAwMjYgQklUKEtWTV9YODZfU1dfUFJPVEVDVEVEX1ZNKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jOjg5OlxcdFxcdHRlc3RfaW5pdDJfaW52YWxpZChLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTSwgXFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXt9LFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmM6OTA6XFx0XFx0XFx0XFx0ICAgXFxcIlZNIHR5cGUgaXMgS1ZNX1g4Nl9TV19QUk9URUNURURfVk1cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jLTkxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDI6NTQuNjU1MDUxMTQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NDAzNDM1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEtWTSBNZW1vcnkgQXR0cmlidXRlIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvIGBrdm1fY3JlYXRlX3ZtYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5YCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyB3ZSBjYW4gYWN0dWFsbHkgdXNlIGBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTYC4gVGhhdCdzIHdoZXJlIGl0J3MgYXBwbGllZCwgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZGl0aW9ucy4gR29vZCBmaXJzdCBzdGVwOiBJJ2xsIGltbWVkaWF0ZWx5IGRpZyBpbnRvIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSlgLiBUaGF0IGZ1bmN0aW9uIHdpbGwgZGVmaW5pdGVseSBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgYWxsb3dhYmxlIG1lbW9yeSBhdHRyaWJ1dGVzIGFuZCBwb3RlbnRpYWxseSBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgbGltaXRhdGlvbnMgb3IgcmVxdWlyZW1lbnRzIGZvciB0aGUgYEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVNgIGNhbGwuIEkgbmVlZCB0byBzZWUgd2hhdCBmYWN0b3JzIGluZmx1ZW5jZSB3aGF0J3Mgc3VwcG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAyOjU4LjA5NTM5NzE1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2MTQwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jPTI0MTk9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2xlYXJfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjQzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxudmlydC9rdm0va3ZtX21haW4uYzoyNDM0OnN0YXRpYyB1NjQga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0pXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDM1LXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjQ0Nj1ib29sIGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNDUyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjQ1MzpcXHRtYXNrIFxcdTAwMjY9IGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI0NTQtXFx0aWYgKGF0dHJzIFxcdTAwMjYgfm1hc2spXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTI2NjU9c3RhdGljIGludCBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjY3Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjI2NzM6XFx0aWYgKGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzIFxcdTAwMjYgfmt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2NzQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ5NDg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uX2dlbmVyaWMoc3RydWN0IGt2bSAqa3ZtLCBsb25nIGFyZylcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTAxMC1cXHRjYXNlIEtWTV9DQVBfTUVNT1JZX0FUVFJJQlVURVM6XFxudmlydC9rdm0va3ZtX21haW4uYzo1MDExOlxcdFxcdHJldHVybiBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSk7XFxudmlydC9rdm0va3ZtX21haW4uYy01MDEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMjo1OC4xNDMwMTYzMDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc2NTYyNjMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGt2bV9zdXBwb3J0ZWRfbWVtX2F0dHJpYnV0ZXMoa3ZtKWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKGt2bSlgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCB0aGUgS1ZNIG1vZHVsZSBpcyBkb2luZyB0byBkZXRlcm1pbmUgc3VwcG9ydGVkIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gcXVpY2tseSBncmFzcCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIFdoYXQgaHlwZXJjYWxscyBhcmUgYmVpbmcgbWFkZT8gQXJlIHdlIHJlbHlpbmcgb24gTVNScywgb3IgcGFyc2luZyBBQ1BJIHRhYmxlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgdG8gYXNjZXJ0YWluIHRoZSBwbGF0Zm9ybSdzIG1lbW9yeSBjYXBhYmlsaXRpZXM/XG5cbkknbSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBtZW1vcnkgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBpdCB3aWxsIHRlbGwgbWUgaG93IHRoZSBLVk0ga2VybmVsIG1vZHVsZSBoYW5kbGVzIE5VTUEgbm9kZXMsIEh1Z2VQYWdlcywgbWVtb3J5IGhvdHBsdWcsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWVtb3J5IGZlYXR1cmVzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjayBvZiBhIGhhcmR3YXJlIGZlYXR1cmUgb3IgaWYgdGhlcmUncyBhIG1vcmUgbnVhbmNlZCBuZWdvdGlhdGlvbiBwcm9jZXNzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBkaWZmZXJlbnQgdmVuZG9yIGltcGxlbWVudGF0aW9ucyB0aGF0IEkga25vdyBleGlzdHMuIEFueSBkZXBlbmRlbmNpZXMgb24gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzIG9yIGNoaXBzZXQgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBpbW1lZGlhdGVseSBhcHBhcmVudC4gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGlmIHRoZSBjaGVjayBmYWlscywgaXMgaXQgZ3JhY2VmdWw/IFdoYXQgZG9lcyBLVk0gZG8gaW4gdGhlIGV2ZW50IHRoYXQgbWVtb3J5IGF0dHJpYnV0ZXMgYXJlIG5vdCBhdmFpbGFibGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDEyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MDIuOTA4NjQ1NTk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0fVxcbjI0MzE6XFx0I2VuZGlmIC8qIENPTkZJR19LVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QgKi9cXG4yNDMyOlxcdFxcbjI0MzM6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbjI0MzQ6XFx0c3RhdGljIHU2NCBrdm1fc3VwcG9ydGVkX21lbV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSlcXG4yNDM1OlxcdHtcXG4yNDM2OlxcdFxcdGlmICgha3ZtIHx8IGt2bV9hcmNoX2hhc19wcml2YXRlX21lbShrdm0pKVxcbjI0Mzc6XFx0XFx0XFx0cmV0dXJuIEtWTV9NRU1PUllfQVRUUklCVVRFX1BSSVZBVEU7XFxuMjQzODpcXHRcXG4yNDM5OlxcdFxcdHJldHVybiAwO1xcbjI0NDA6XFx0fVxcbjI0NDE6XFx0XFxuMjQ0MjpcXHQvKlxcbjI0NDM6XFx0ICogUmV0dXJucyB0cnVlIGlmIF9hbGxfIGdmbnMgaW4gdGhlIHJhbmdlIFtAc3RhcnQsIEBlbmQpIGhhdmUgYXR0cmlidXRlc1xcbjI0NDQ6XFx0ICogc3VjaCB0aGF0IHRoZSBiaXRzIGluIEBtYXNrIG1hdGNoIEBhdHRycy5cXG4yNDQ1OlxcdCAqL1xcbjI0NDY6XFx0Ym9vbCBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3Qgc3RhcnQsIGdmbl90IGVuZCxcXG4yNDQ3OlxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGF0dHJzKVxcbjI0NDg6XFx0e1xcbjI0NDk6XFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2a3ZtLVxcdTAwM2VtZW1fYXR0cl9hcnJheSwgc3RhcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzowMi45MDg5NjUyOTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTIyMDYxOTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTWFuYWdlbWVudCBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgZmVhdHVyZXMgd29yaywgcGFydGljdWxhcmx5IHRoZSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zLCBhbmQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIHJlbGF0ZWQgY29kZS5cblxuRmlyc3QsIHRoZSBjb2RlIGNoZWNrcyBga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlc2AgYmFzZWQgb24gdGhlIFZNIHR5cGUuIGBLVk1fWDg2X1NXX1BST1RFQ1RFRF9WTWAgZW5hYmxlcyBwcml2YXRlIG1lbW9yeSBhdHRyaWJ1dGVzLiBFdmVuIGlmIGF0dHJpYnV0ZXMgYXJlIGNsZWFyZWQgKHNldCB0byAwKSwgdGhpcyBpcyBhbGxvd2VkLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgZG9lc24ndCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIChsaWtlIFNFViBvciBURFgpOyBpdCdzIHNvZnR3YXJlLWJhc2VkIGFuZCB0ZXN0LW9yaWVudGVkLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVG8gZW5hYmxlIHRoaXMsIEkgbmVlZCBgS1ZNYCAob3IgYEtWTV9JTlRFTGAvYEtWTV9BTURgKSwgYEtWTV9TV19QUk9URUNURURfVk1gLCB3aGljaCBpdHNlbGYgbmVlZHMgYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLiBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgKnNlbGVjdHMqIGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIENydWNpYWxseSwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCBpcyAqbm90KiBkaXJlY3RseSBwcm9tcHRlZCBpbiB0aGUgS2NvbmZpZywgbWVhbmluZyBzaW1wbHkgc2V0dGluZyBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTPXlgIG1pZ2h0ICpub3QqIGJlIGVub3VnaC4gSXQgd2lsbCBiZSBlbmFibGVkIG9ubHkgaWYgaXQgaXMgc2VsZWN0ZWQuIEkgY2FuIGFsc28gdXNlIGBLVk1fQU1EX1NFVmAgKHdoaWNoIGRlcGVuZHMgb24gYEtWTV9BTURgIGFuZCBgWDg2XzY0YCkgb3IgYEtWTV9JTlRFTF9URFhgLiBJdCBpcyBiZXN0IGlmIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCBpcyB1c2VkLCBhbmQgdGhlbiB0ZXN0IHRoZSBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gbGlzdCBgS1ZNYCwgYEtWTV9TV19QUk9URUNURURfVk1gLCBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGluIGBFbmFibGVDb25maWdzYCAob3IgYEtWTV9BTURgIG9yIGBLVk1fSU5URUxgIGFzIHdlbGwpLlxuXG5UaGUgcXVlc3Rpb24gb2YgcmVhY2hhYmlsaXR5IGlzIGtleS4gQ2FuIHRoaXMgY29kZSBiZSByZWFjaGVkIGluIGEgc3RhbmRhcmQsIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRoYXQgU3l6a2FsbGVyIGNhbiB0ZXN0PyBZZXMsIGFic29sdXRlbHkuIFRoZXNlIGlvY3RscyBhcmUgY2FsbGVkIHZpYSBgaW9jdGwoS1ZNX0NSRUFURV9WTSlgIGFuZCBgaW9jdGwoS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFUylgLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgcGF0aCBpcyBlYXNpbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gVGhlc2UgaW9jdGxzIG1hbmlwdWxhdGUgbWVtb3J5IGF0dHJpYnV0ZXMgdXNpbmcgYGt2bV9tYWluLmNgLlxuXG5Ob3csIGZvciB0aGUgY29kZSBjaGFuZ2VzLiBJIHNlZSBhIG5ldyBsaW1pdCBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggb2YgYG1lbV9hdHRyX2FycmF5YC4gYGt2bS1cdTAwM2VtZW1fYXR0cl9hcnJheWAgaXMgaW5pdGlhbGl6ZWQgaW4gYGt2bV9jcmVhdGVfdm1gLiBBIG5ldyBmdW5jdGlvbiwgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgaXMgaW50cm9kdWNlZCB0byBjb3VudCBlbnRyaWVzIGluIGBtZW1fYXR0cl9hcnJheWAuIFRoaXMgaXMgdXNlZCB0byBlbmZvcmNlIHRoZSBsaW1pdC4gVGhlIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCBjb2RlIG5vdyBjaGVja3MgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBUaGUgbG9naWMgdXBkYXRlcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgYWZ0ZXIgdGhlIHBvdGVudGlhbGx5IG11dGF0aW5nIG9wZXJhdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiBwb3RlbnRpYWwgaXNzdWVzLiBJbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBgeGFzX2Zvcl9lYWNoYCBpcyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgeGFycmF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHhhc19mb3JfZWFjaGAgd29ya3Mgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgKCBgaW5jbHVkZS9saW51eC94YXJyYXkuaGApLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBpdGVyYXRlcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDY3NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzoxNS4xMTUxNjQ1MzJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIyNDA3NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSB4YXNfZm9yX2VhY2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODAwPWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xODE2LSAqL1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTgxNzojZGVmaW5lIHhhc19mb3JfZWFjaCh4YXMsIGVudHJ5LCBtYXgpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4MTgtXFx0Zm9yIChlbnRyeSA9IHhhc19maW5kKHhhcywgbWF4KTsgZW50cnk7IFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNC0gKi9cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4MzU6I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTgzNi1cXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTsgZW50cnk7IFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4NTE6I2RlZmluZSB4YXNfZm9yX2VhY2hfY29uZmxpY3QoeGFzLCBlbnRyeSkgXFxcXFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTg1Mi1cXHR3aGlsZSAoKGVudHJ5ID0geGFzX2ZpbmRfY29uZmxpY3QoeGFzKSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE2Ljc4NzQxMjU1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDk2NzQ3Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhBcnJheSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhBcnJheSBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBhcm91bmQgYSBzcGVjaWZpYyBhcmVhIG9mIHRoZSBjb2RlLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbmNsdWRlL2xpbnV4L3hhcnJheS5oYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lIDE4MTcuIEknbSBzdXJlIEkga25vdyB3aGF0IEknbSBsb29raW5nIGZvciwgYW5kIEknbGwgc2VlIHdoYXQgdGhlIGNvZGUgYXQgdGhhdCBsb2NhdGlvbiByZXZlYWxzLiBNYXliZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb24sIG9yIHNvbWUgY3JpdGljYWwgbWFjcm8gbWFuaXB1bGF0aW9uLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBhbmNob3IgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MjA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MTkuODg0MTYzNjI1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3hhcnJheS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MTA6XFx0ICogVGhlIGxvb3AgYm9keSB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGVudHJ5IHByZXNlbnQgaW4gdGhlIHhhcnJheVxcbjE4MTE6XFx0ICogYmV0d2VlbiB0aGUgY3VycmVudCB4YXMgcG9zaXRpb24gYW5kIEBtYXguICBAZW50cnkgd2lsbCBiZSBzZXQgdG9cXG4xODEyOlxcdCAqIHRoZSBlbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgeGFycmF5LiAgSXQgaXMgc2FmZSB0byBkZWxldGUgZW50cmllc1xcbjE4MTM6XFx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXFxuMTgxNDpcXHQgKiBvciB0aGUgeGFfbG9jayB3aGlsZSBpdGVyYXRpbmcuICBJZiB5b3UgbmVlZCB0byBkcm9wIHRoZSBsb2NrLCBjYWxsXFxuMTgxNTpcXHQgKiB4YXNfcGF1c2UoKSBmaXJzdC5cXG4xODE2OlxcdCAqL1xcbjE4MTc6XFx0I2RlZmluZSB4YXNfZm9yX2VhY2goeGFzLCBlbnRyeSwgbWF4KSBcXFxcXFxuMTgxODpcXHRcXHRmb3IgKGVudHJ5ID0geGFzX2ZpbmQoeGFzLCBtYXgpOyBlbnRyeTsgXFxcXFxcbjE4MTk6XFx0XFx0ICAgICBlbnRyeSA9IHhhc19uZXh0X2VudHJ5KHhhcywgbWF4KSlcXG4xODIwOlxcdFxcbjE4MjE6XFx0LyoqXFxuMTgyMjpcXHQgKiB4YXNfZm9yX2VhY2hfbWFya2VkKCkgLSBJdGVyYXRlIG92ZXIgYSByYW5nZSBvZiBhbiBYQXJyYXkuXFxuMTgyMzpcXHQgKiBAeGFzOiBYQXJyYXkgb3BlcmF0aW9uIHN0YXRlLlxcbjE4MjQ6XFx0ICogQGVudHJ5OiBFbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgYXJyYXkuXFxuMTgyNTpcXHQgKiBAbWF4OiBNYXhpbXVtIGluZGV4IHRvIHJldHJpZXZlIGZyb20gYXJyYXkuXFxuMTgyNjpcXHQgKiBAbWFyazogTWFyayB0byBzZWFyY2ggZm9yLlxcbjE4Mjc6XFx0ICpcXG4xODI4OlxcdCAqIFRoZSBsb29wIGJvZHkgd2lsbCBiZSBleGVjdXRlZCBmb3IgZWFjaCBtYXJrZWQgZW50cnkgaW4gdGhlIHhhcnJheVxcbjE4Mjk6XFx0ICogYmV0d2VlbiB0aGUgY3VycmVudCB4YXMgcG9zaXRpb24gYW5kIEBtYXguICBAZW50cnkgd2lsbCBiZSBzZXQgdG9cXG4xODMwOlxcdCAqIHRoZSBlbnRyeSByZXRyaWV2ZWQgZnJvbSB0aGUgeGFycmF5LiAgSXQgaXMgc2FmZSB0byBkZWxldGUgZW50cmllc1xcbjE4MzE6XFx0ICogZnJvbSB0aGUgYXJyYXkgaW4gdGhlIGxvb3AgYm9keS4gIFlvdSBzaG91bGQgaG9sZCBlaXRoZXIgdGhlIFJDVSBsb2NrXFxuMTgzMjpcXHQgKiBvciB0aGUgeGFfbG9jayB3aGlsZSBpdGVyYXRpbmcuICBJZiB5b3UgbmVlZCB0byBkcm9wIHRoZSBsb2NrLCBjYWxsXFxuMTgzMzpcXHQgKiB4YXNfcGF1c2UoKSBmaXJzdC5cXG4xODM0OlxcdCAqL1xcbjE4MzU6XFx0I2RlZmluZSB4YXNfZm9yX2VhY2hfbWFya2VkKHhhcywgZW50cnksIG1heCwgbWFyaykgXFxcXFxcbjE4MzY6XFx0XFx0Zm9yIChlbnRyeSA9IHhhc19maW5kX21hcmtlZCh4YXMsIG1heCwgbWFyayk7IGVudHJ5OyBcXFxcXFxuMTgzNzpcXHRcXHQgICAgIGVudHJ5ID0geGFzX25leHRfbWFya2VkKHhhcywgbWF4LCBtYXJrKSlcXG4xODM4OlxcdFxcbjE4Mzk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjE5Ljg4NDI5NTgyNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MjU0ODY2NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTG9ja2luZyBJc3N1ZXMgaW4gS1ZNIE1lbW9yeSBBdHRyaWJ1dGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGB4YXNfZm9yX2VhY2hgIGRvY3VtZW50YXRpb24gYW5kIGl0J3Mgc2NyZWFtaW5nIGF0IG1lOiBcIkhvbGQgdGhlIFJDVSBsb2NrIG9yIHRoZSB4YV9sb2NrIHdoZW4gaXRlcmF0aW5nIVwiIEZpbmUsIGdvdCBpdC4gQnV0IG5vdyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gcG9wcyB1cDogd2hhdCBsb2NrIGlzICphY3R1YWxseSogYmVpbmcgaGVsZCB3aGVuIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgaXMgY2FsbGVkPyBUaGF0J3MgdGhlIGNydXggb2YgdGhpcy5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIHNlZSBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgdGhlIGN1bHByaXQuIEl0IGdyYWJzIGBtdXRleF9sb2NrKFx1MDAyNmt2bS1cdTAwM2VzbG90c19sb2NrKTtgIGFuZCAqdGhlbiogY2FsbHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKGt2bSlgLiBCaW5nbyEgYHNsb3RzX2xvY2tgIGlzIGhlbGQuIE5vdywgaGVyZSdzIHRoZSBraWNrZXIg4oCTIGlzIGByY3VfcmVhZF9sb2NrKClgIGFjdGl2ZSBhdCB0aGF0IHBvaW50PyBOb3BlLiBJcyBgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LnhhX2xvY2tgIGhlbGQ/IE5lZ2F0aXZlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHRocmVhZGluZyBkaXNhc3RlciB3YWl0aW5nIHRvIGhhcHBlbi4gSXQncyBhIGNsYXNzaWMgY2FzZSBvZiBhc3N1bWluZyBhIGxvY2sgaXMgaGVsZCB3aGVuIGl0J3Mgbm90LlxuXG5UbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBsZXQncyBxdWlja2x5IGNoZWNrIHdoYXQgbG9jayBga3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlc2AgYWN0dWFsbHkgdXNlcywgb3IgbW9yZSBpbXBvcnRhbnRseSwgKmhvbGRzKi4gVGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIGFuZCBtYXkgc2hlZCBzb21lIGxpZ2h0LCBidXQgbXkgZ3V0IHRlbGxzIG1lIHdlJ3ZlIGZvdW5kIGEgdnVsbmVyYWJpbGl0eS4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk3NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI0LjEzOTE2NjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NDU6XFx0ICovXFxuMjQ0NjpcXHRib29sIGt2bV9yYW5nZV9oYXNfbWVtb3J5X2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxcbjI0NDc6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgYXR0cnMpXFxuMjQ0ODpcXHR7XFxuMjQ0OTpcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBzdGFydCk7XFxuMjQ1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbjI0NTE6XFx0XFx0dm9pZCAqZW50cnk7XFxuMjQ1MjpcXHRcXG4yNDUzOlxcdFxcdG1hc2sgXFx1MDAyNj0ga3ZtX3N1cHBvcnRlZF9tZW1fYXR0cmlidXRlcyhrdm0pO1xcbjI0NTQ6XFx0XFx0aWYgKGF0dHJzIFxcdTAwMjYgfm1hc2spXFxuMjQ1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ1NjpcXHRcXG4yNDU3OlxcdFxcdGlmIChlbmQgPT0gc3RhcnQgKyAxKVxcbjI0NTg6XFx0XFx0XFx0cmV0dXJuIChrdm1fZ2V0X21lbW9yeV9hdHRyaWJ1dGVzKGt2bSwgc3RhcnQpIFxcdTAwMjYgbWFzaykgPT0gYXR0cnM7XFxuMjQ1OTpcXHRcXG4yNDYwOlxcdFxcdGd1YXJkKHJjdSkoKTtcXG4yNDYxOlxcdFxcdGlmICghYXR0cnMpXFxuMjQ2MjpcXHRcXHRcXHRyZXR1cm4gIXhhc19maW5kKFxcdTAwMjZ4YXMsIGVuZCAtIDEpO1xcbjI0NjM6XFx0XFxuMjQ2NDpcXHRcXHRmb3IgKGluZGV4ID0gc3RhcnQ7IGluZGV4IFxcdTAwM2MgZW5kOyBpbmRleCsrKSB7XFxuMjQ2NTpcXHRcXHRcXHRkbyB7XFxuMjQ2NjpcXHRcXHRcXHRcXHRlbnRyeSA9IHhhc19uZXh0KFxcdTAwMjZ4YXMpO1xcbjI0Njc6XFx0XFx0XFx0fSB3aGlsZSAoeGFzX3JldHJ5KFxcdTAwMjZ4YXMsIGVudHJ5KSk7XFxuMjQ2ODpcXHRcXG4yNDY5OlxcdFxcdFxcdGlmICh4YXMueGFfaW5kZXggIT0gaW5kZXggfHxcXG4yNDcwOlxcdFxcdFxcdCAgICAoeGFfdG9fdmFsdWUoZW50cnkpIFxcdTAwMjYgbWFzaykgIT0gYXR0cnMpXFxuMjQ3MTpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjQ3MjpcXHRcXHR9XFxuMjQ3MzpcXHRcXG4yNDc0OlxcdFxcdHJldHVybiB0cnVlO1xcbjI0NzU6XFx0fVxcbjI0NzY6XFx0XFxuMjQ3NzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbjI0Nzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcXG4yNDc5OlxcdHtcXG4yNDgwOlxcdFxcdHN0cnVjdCBrdm1fZ2ZuX3JhbmdlIGdmbl9yYW5nZTtcXG4yNDgxOlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7XFxuMjQ4MjpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4yNDgzOlxcdFxcdHN0cnVjdCBrdm1fbWVtc2xvdF9pdGVyIGl0ZXI7XFxuMjQ4NDpcXHRcXHRib29sIGZvdW5kX21lbXNsb3QgPSBmYWxzZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjQuMTM5NDM3NzUxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM4NjI5ODkzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBFbnRyeSBDb3VudGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBrdm1fcmFuZ2VfaGFzX21lbW9yeV9hdHRyaWJ1dGVzYCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBndWFyZChyY3UpKCk7YCBjYWxsLiBSaWdodCwgYWNjZXNzaW5nIHRob3NlIHhhcnJheSBub2RlcyByZXF1aXJlcyBSQ1Ugb3IgYHhhX2xvY2tgIHByb3RlY3Rpb24uIEdvdCBpdC4gTm93LCBsZXQncyBsb29rIGF0IGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AuXG5cbmBgYGNcbnN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcbntcblx0WEFfU1RBVEUoeGFzLCBcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIDApO1xuXHR1bnNpZ25lZCBsb25nIGNvdW50ID0gMDtcblx0dm9pZCAqZW50cnk7XG5cblx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZW50cnksIFVMT05HX01BWCkge1xuXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcblx0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChlbnRyeSlcblx0XHRcdGNvdW50Kys7XG5cblx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcblx0XHRcdHhhc19wYXVzZShcdTAwMjZ4YXMpO1xuXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvdW50O1xufVxuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gYGNvbmRfcmVzY2hlZCgpYCBpcyAqaW5zaWRlKiB0aGUgbG9vcCEgVGhhdCBtZWFucyBSQ1UgKmNhbm5vdCogYmUgaGVsZCwgcmlnaHQ/IFlvdSBjYW4ndCBzbGVlcCB3aGlsZSBob2xkaW5nIFJDVSEgQW5kIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGB4YV9sb2NrYCBpcyBoZWxkIGVpdGhlci4gVGhhdCdzLi4uIGludGVyZXN0aW5nLiBTbywgaG93IGRvZXMgYHhhc19maW5kYCBvciBgeGFzX25leHRfZW50cnlgIGJlaGF2ZSB3aGVuICpuZWl0aGVyKiBSQ1Ugbm9yIGB4YV9sb2NrYCBpcyBoZWxkP1xuXG5JIG5lZWQgdG8gZmlndXJlIHRoaXMgb3V0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBpcyBub3QgcmFjeS4gRG9lcyBsb2NrZGVwIG9yIENPTkZJR19QUk9WRV9SQ1UgY29tcGxhaW4/IEkgbmVlZCB0byBjaGVjayBob3cgYHhhc19maW5kYCBhbmQgYHhhc19kZXNjZW5kYCBhcmUgaW1wbGVtZW50ZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBsaWIveGFycmF5LmNgLCB0byBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCB3aGVuIG5vIGV4cGxpY2l0IGxvY2tpbmcgaXMgcHJlc2VudC4gSSBuZWVkIHRvIHZlcmlmeSBob3cgdGhlc2UgeGFycmF5IG9wZXJhdGlvbnMgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIGluIHRoaXMgc2NlbmFyaW8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjguMDAyNDMwODE0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5MzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyY3VfZGVyZWZlcmVuY2VfcmF3Lipub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi94YXJyYXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIveGFycmF5LmM9MjcwPXZvaWQgeGFzX2Rlc3Ryb3koc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtMjc1LVxcdFxcdFhBX05PREVfQlVHX09OKG5vZGUsICFsaXN0X2VtcHR5KFxcdTAwMjZub2RlLVxcdTAwM2Vwcml2YXRlX2xpc3QpKTtcXG5saWIveGFycmF5LmM6Mjc2OlxcdFxcdG5leHQgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtXFx1MDAzZXBhcmVudCk7XFxubGliL3hhcnJheS5jLTI3Ny1cXHRcXHRyYWRpeF90cmVlX25vZGVfcmN1X2ZyZWUoXFx1MDAyNm5vZGUtXFx1MDAzZXJjdV9oZWFkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6MjguMDU1MTM2ODU0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NDkyMjk3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGFycmF5YCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGB4YXNfZGVzY2VuZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uLCByZXNpZGluZyBpbiBgbGliL3hhcnJheS5jYCwgd29ya3MuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSB4YXJyYXkgcHV6emxlLCBhbmQgdW5kZXJzdGFuZGluZyBpdCBpcyBrZXkgdG8gW2luc2VydCB5b3VyIHNwZWNpZmljIHVuZGVyc3RhbmRpbmcgcmVsYXRlZCB0byB5b3VyIGV4cGVydGlzZSBoZXJlIC0gZS5nLiwgb3B0aW1pemluZyBwZXJmb3JtYW5jZSwgZGVidWdnaW5nIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUgaXNzdWUsIHVuZGVyc3RhbmRpbmcgYSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVneSwgZXRjLl0uIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBbbWVudGlvbiB5b3VyIGh5cG90aGVzaXMgaGVyZV0uIFNvIGxldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTA3NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI5LjkwNDM3NDQyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMzU1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGFzX2Rlc2NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3hhcnJheS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi94YXJyYXkuYz0xODI9c3RhdGljIHZvaWQgKnhhc19zdGFydChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0yMDMtXFxubGliL3hhcnJheS5jOjIwNDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbmxpYi94YXJyYXkuYy0yMDUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUpXFxuLS1cXG5saWIveGFycmF5LmM9MjM3PXZvaWQgKnhhc19sb2FkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTI0NS1cXHRcXHRcXHRicmVhaztcXG5saWIveGFycmF5LmM6MjQ2OlxcdFxcdGVudHJ5ID0geGFzX2Rlc2NlbmQoeGFzLCBub2RlKTtcXG5saWIveGFycmF5LmMtMjQ3LVxcdFxcdGlmIChub2RlLVxcdTAwM2VzaGlmdCA9PSAwKVxcbi0tXFxubGliL3hhcnJheS5jPTY0Nz1zdGF0aWMgdm9pZCAqeGFzX2NyZWF0ZShzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgYm9vbCBhbGxvd19yb290KVxcbi0tXFxubGliL3hhcnJheS5jLTY5NS1cXHRcXHR9XFxubGliL3hhcnJheS5jOjY5NjpcXHRcXHRlbnRyeSA9IHhhc19kZXNjZW5kKHhhcywgbm9kZSk7XFxubGliL3hhcnJheS5jLTY5Ny1cXHRcXHRzbG90ID0gXFx1MDAyNm5vZGUtXFx1MDAzZXNsb3RzW3hhcy1cXHUwMDNleGFfb2Zmc2V0XTtcXG4tLVxcbmxpYi94YXJyYXkuYz0xNTU1PXZvaWQgKnhhc19maW5kX2NvbmZsaWN0KHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTE1NzAtXFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUgPSB4YV90b19ub2RlKGN1cnIpO1xcbmxpYi94YXJyYXkuYzoxNTcxOlxcdFxcdFxcdGN1cnIgPSB4YXNfZGVzY2VuZCh4YXMsIG5vZGUpO1xcbmxpYi94YXJyYXkuYy0xNTcyLVxcdFxcdH1cXG4tLVxcbmxpYi94YXJyYXkuYz0yMTE5PWJvb2wgeGFfZ2V0X21hcmsoc3RydWN0IHhhcnJheSAqeGEsIHVuc2lnbmVkIGxvbmcgaW5kZXgsIHhhX21hcmtfdCBtYXJrKVxcbi0tXFxubGliL3hhcnJheS5jLTIxMjgtXFx0XFx0XFx0Z290byBmb3VuZDtcXG5saWIveGFycmF5LmM6MjEyOTpcXHRcXHRlbnRyeSA9IHhhc19kZXNjZW5kKFxcdTAwMjZ4YXMsIHhhX3RvX25vZGUoZW50cnkpKTtcXG5saWIveGFycmF5LmMtMjEzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjI5Ljk1NDYxNzc2NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyOTY5MjQ3NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OlxuXG4qKkRpdmluZyBpbnRvIGB4YXNfZGVzY2VuZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgeGFzX2Rlc2NlbmRgIGZ1bmN0aW9uLiBUaGlzIHNob3VsZCBiZSBpbiBgbGliL3hhcnJheS5jYCwgc28gSSdsbCBuYXZpZ2F0ZSBvdmVyIHRoZXJlLiBJJ20ga2VlbiB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBwYXJ0IG9mIHRoZSBYQXJyYXkgbGlicmFyeSB3b3Jrcy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgdXNlZnVsIGFzIHBhcnQgb2YgdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTc5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMyLjkyMzg2NzgwM1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3hhcnJheS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRcXHR4YXMtXFx1MDAzZXhhX25vZGUgPSBOVUxMO1xcbiAyMDE6XFx0XFx0cmV0dXJuIGVudHJ5O1xcbiAyMDI6XFx0fVxcbiAyMDM6XFx0XFxuIDIwNDpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHhhX25vZGUgKm5vZGUpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCBub2RlKTtcXG4gMjA4OlxcdFxcdHZvaWQgKmVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0XFx0eGFzLVxcdTAwM2V4YV9ub2RlID0gbm9kZTtcXG4gMjExOlxcdFxcdHdoaWxlICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xcbiAyMTI6XFx0XFx0XFx0b2Zmc2V0ID0geGFfdG9fc2libGluZyhlbnRyeSk7XFxuIDIxMzpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuIDIxNDpcXHRcXHRcXHRpZiAobm9kZS1cXHUwMDNlc2hpZnQgXFx1MDAyNlxcdTAwMjYgeGFfaXNfbm9kZShlbnRyeSkpXFxuIDIxNTpcXHRcXHRcXHRcXHRlbnRyeSA9IFhBX1JFVFJZX0VOVFJZO1xcbiAyMTY6XFx0XFx0fVxcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9IG9mZnNldDtcXG4gMjE5OlxcdFxcdHJldHVybiBlbnRyeTtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0LyoqXFxuIDIyMzpcXHQgKiB4YXNfbG9hZCgpIC0gTG9hZCBhbiBlbnRyeSBmcm9tIHRoZSBYQXJyYXkgKGFkdmFuY2VkKS5cXG4gMjI0OlxcdCAqIEB4YXM6IFhBcnJheSBvcGVyYXRpb24gc3RhdGUuXFxuIDIyNTpcXHQgKlxcbiAyMjY6XFx0ICogVXN1YWxseSB3YWxrcyB0aGUgQHhhcyB0byB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgdG8gbG9hZCB0aGUgZW50cnlcXG4gMjI3OlxcdCAqIHN0b3JlZCBhdCB4YV9pbmRleC4gIEhvd2V2ZXIsIGl0IHdpbGwgZG8gbm90aGluZyBhbmQgcmV0dXJuICVOVUxMIGlmXFxuIDIyODpcXHQgKiBAeGFzIGlzIGluIGFuIGVycm9yIHN0YXRlLiAgeGFzX2xvYWQoKSB3aWxsIG5ldmVyIGV4cGFuZCB0aGUgdHJlZS5cXG4gMjI5OlxcdCAqXFxuIDIzMDpcXHQgKiBJZiB0aGUgeGFfc3RhdGUgaXMgc2V0IHVwIHRvIG9wZXJhdGUgb24gYSBtdWx0aS1pbmRleCBlbnRyeSwgeGFzX2xvYWQoKVxcbiAyMzE6XFx0ICogbWF5IHJldHVybiAlTlVMTCBvciBhbiBpbnRlcm5hbCBlbnRyeSwgZXZlbiBpZiB0aGVyZSBhcmUgZW50cmllc1xcbiAyMzI6XFx0ICogcHJlc2VudCB3aXRoaW4gdGhlIHJhbmdlIHNwZWNpZmllZCBieSBAeGFzLlxcbiAyMzM6XFx0ICpcXG4gMjM0OlxcdCAqIENvbnRleHQ6IEFueSBjb250ZXh0LiAgVGhlIGNhbGxlciBzaG91bGQgaG9sZCB0aGUgeGFfbG9jayBvciB0aGUgUkNVIGxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjMyLjkyMzk5NzQyM1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTk1MjE0MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IHRob3VnaHQgcHJvY2VzcyBhYm91dCBgeGFfZW50cnlgLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhIGtub3dsZWRnZWFibGUgY29sbGVhZ3VlLiBIZXJlJ3MgbXkgdGFrZTpcblxuKipBbmFseXppbmcgdGhlIGB4YV9lbnRyeWAgVmFyaWFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgeGFfZW50cnlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIG9yIGNvZGUgYXJjaGl0ZWN0dXJlIHdoZXJlIHRoaXMgdmFyaWFibGUgbGl2ZXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlLiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQncyBhIGRhdGEgc3RydWN0dXJlLCBhIGZ1bmN0aW9uIGNhbGwsIGEgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIEknZCBhc3N1bWUgaXQncyBhbiBlbnRyeSBwb2ludCBmb3IgYW4gWEEgdHJhbnNhY3Rpb24uXG5cbkknbSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHR5cGljYWwgWEEgY29uY2VwdHM6IGFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBgeGFfc3RhcnRgLCBgeGFfZW5kYCwgYHhhX3ByZXBhcmVgLCBgeGFfY29tbWl0YCwgYHhhX3JvbGxiYWNrYCBmdW5jdGlvbnM/IElmIHNvLCB3aGljaCBvbmUgaXMgdGhpcywgb3IgaXMgdGhpcyBtb3JlIG9mIGFuIGludGVybmFsIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgWEEgcmVzb3VyY2VzPyBJcyB0aGVyZSBhIGRvY3VtZW50YXRpb24gcmVmZXJlbmNlIEkgY2FuIHF1aWNrbHkgY2hlY2ssIG9yIHJlbGF0ZWQgY29kZSB0aGF0IHByb3ZpZGVzIGNvbnRleHQ/IEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnMgYXJlLiBBbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhpcyB0eXBlIHdpbGwgYmUgd3JvbmcuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY29tcG9uZW50cyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCBpdC4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLCB0aGUgcmVzb3VyY2UgbWFuYWdlcnMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGllY2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIGNvbnRyb2wgaXMgdml0YWwuIElzIHRoaXMgdmFyaWFibGUgdXNlZCBkaXJlY3RseSBpbiBhIGZ1bmN0aW9uIGNhbGwsIGEgc3RydWN0dXJlLCBvciBpbmRpcmVjdGx5PyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgbGlua2VkIHRvIHRoZSB1c2Ugb2YgYHhhX2VudHJ5YD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBhbmQgYXRvbWljaXR5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nP1xuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYHhhX2VudHJ5YCBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHByb2Nlc3MuIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHB1cnBvc2UsIHRoZSByaXNrcywgYW5kIGl0cyBjb25uZWN0aW9uIHRvIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjM4LjkxOTIxNDA0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM1MzgwOTMwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHhhX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0MC41NTQ2MDYxN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNDMwMjg0NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRmluZGluZyB0aGUgYHhhX2VudHJ5YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gbG9jYXRlIHRoaXMgYHhhX2VudHJ5YCBxdWlja2x5IGFuZCBlZmZpY2llbnRseS4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIHByb2JhYmx5IGRlcGVuZCBvbiB0aGUgY29udGV4dC4gQW0gSSBkZWFsaW5nIHdpdGggYSBkYXRhYmFzZSBxdWVyeT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IFNvdXJjZSBjb2RlPyBFYWNoIGRlbWFuZHMgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGFjdGljLlxuXG5JZiBpdCdzIGNvZGUsIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggdXNpbmcgbXkgSURFJ3MgZnVuY3Rpb25hbGl0eSDigJMgYSBzaW1wbGUgXCJmaW5kIGluIGZpbGVzXCIgb3BlcmF0aW9uIHNob3VsZCBkbyB0aGUgdHJpY2ssIGxldmVyYWdpbmcgd2lsZGNhcmRzIG9yIHJlZ2V4IGlmIG5lY2Vzc2FyeSB0byBhY2NvdW50IGZvciB2YXJpYXRpb25zIGluIG5hbWluZyBjb252ZW50aW9ucyAoZS5nLiwgYHhhRW50cnlgLCBgWEFFbnRyeWAsIGB4X2FfZW50cnlgKS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSByZXN1bHRzLCBub3RpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJcyBpdCBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uPyBBIGZ1bmN0aW9uIGNhbGw/IEEgZGF0YSBzdHJ1Y3R1cmUgbWVtYmVyPyBUaGlzIGNvbnRleHR1YWwgdW5kZXJzdGFuZGluZyBpcyBjcnVjaWFsLlxuXG5JZiB0aGUgY29udGV4dCBpcyBjb25maWd1cmF0aW9uLCBJJ20gdGhpbmtpbmcgSSdsbCB0cnkgc2VhcmNoaW5nIGluc2lkZSB0aGUgZmlsZS4gSSBtaWdodCB1c2UgdGhlIGZpbGUgc2VhcmNoIHV0aWxpdHksIGRlcGVuZGluZyBvbiBob3cgbGFyZ2UgdGhlIGZpbGVzIGFyZS4gTWF5YmUgaXQncyBhIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBPciBpdCBjb3VsZCBiZSBkZWZpbmVkIGluIGEgc2VwYXJhdGUgY29uZmlnIGZpbGUsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGluIHRoZSByaWdodCBwbGFjZXMuXG5cbklmIGl0J3MgbW9yZSBjb25jZXB0dWFsLCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHVuZGVybHlpbmcgc3lzdGVtLiBXaGF0IGRvZXMgYW4gXCJYQSBlbnRyeVwiIHR5cGljYWxseSByZXByZXNlbnQ/IElzIGl0IHJlbGF0ZWQgdG8gZGlzdHJpYnV0ZWQgdHJhbnNhY3Rpb25zPyBSZXNvdXJjZSBtYW5hZ2Vycz8gWEEgaW50ZXJmYWNlcz8gVGhpcyBtZW50YWwgZnJhbWV3b3JrIHdpbGwgaGVscCBtZSBuYXJyb3cgZG93biB0aGUgc2VhcmNoIHNwYWNlIGFuZCBhbnRpY2lwYXRlIHdoZXJlIEknbSBsaWtlbHkgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvciB1c2FnZS4gSSB3aWxsIGFsc28gaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZWxlbWVudCBoYXMgYmVlbiBvYmZ1c2NhdGVkLlxuXG5NeSBpbW1lZGlhdGUgZ29hbCBpc24ndCBqdXN0IHRvICpmaW5kKiBpdCwgYnV0IHRvICp1bmRlcnN0YW5kKiBpdC4gT25jZSBJJ3ZlIGxvY2F0ZWQgdGhlIGB4YV9lbnRyeWAsIEknbGwgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMgb3IgbW9kaWZpY2F0aW9uIEkgbWlnaHQgbmVlZCB0byBwZXJmb3JtLiBJIG1pZ2h0IGV2ZW4gY3JlYXRlIGEgbm90ZSB0byBjYXB0dXJlIGhvdyBJIGZvdW5kIGl0LCB0byBzdHJlYW1saW5lIGZ1dHVyZSBzZWFyY2hlcy4gTGV0J3MgZ2V0IGNyYWNraW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk0NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NDMuOTg0ODkzOTM0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk0NzAwODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhX2VudHJ5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC94YXJyYXkuaD0xMjE1PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfaGVhZF9sb2NrZWQoY29uc3Qgc3RydWN0IHhhcnJheSAqeGEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTEyMjEtLyogUHJpdmF0ZSAqL1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTIyMjpzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5KGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTIyMy1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgeGFfbm9kZSAqbm9kZSwgdW5zaWduZWQgaW50IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTYxND1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19yZWxvYWQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE2MjMtXFx0XFx0b2Zmc2V0ID0gKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAzZVxcdTAwM2Ugbm9kZS1cXHUwMDNlc2hpZnQpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSztcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE2MjQ6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTYyNS1cXHRcXHRpZiAoIXhhX2lzX3NpYmxpbmcoZW50cnkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMwLVxcdH1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE2MzE6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIG9mZnNldCk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNjMyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5Lmg9MTcxNz1zdGF0aWMgaW5saW5lIHZvaWQgKnhhc19uZXh0X2VudHJ5KHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTczMC1cXHRcXHRcXHRyZXR1cm4geGFzX2ZpbmQoeGFzLCBtYXgpO1xcbmluY2x1ZGUvbGludXgveGFycmF5Lmg6MTczMTpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0ICsgMSk7XFxuaW5jbHVkZS9saW51eC94YXJyYXkuaC0xNzMyLVxcdFxcdGlmICh1bmxpa2VseSh4YV9pc19pbnRlcm5hbChlbnRyeSkpKVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xNzc0PXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCxcXG4tLVxcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTc4OS1cXHRcXHRyZXR1cm4geGFzX2ZpbmRfbWFya2VkKHhhcywgbWF4LCBtYXJrKTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE3OTA6XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpO1xcbmluY2x1ZGUvbGludXgveGFycmF5LmgtMTc5MS1cXHRpZiAoIWVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xODczPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX3ByZXYoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4ODItXFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQtLTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE4ODM6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE4ODQtfVxcbi0tXFxuaW5jbHVkZS9saW51eC94YXJyYXkuaD0xOTAyPXN0YXRpYyBpbmxpbmUgdm9pZCAqeGFzX25leHQoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTEtXFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQrKztcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE5MTI6XFx0cmV0dXJuIHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIG5vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE5MTMtfVxcbi0tXFxubGliL3hhcnJheS5jPTIwND1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKnhhc19kZXNjZW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLFxcbi0tXFxubGliL3hhcnJheS5jLTIwNy1cXHR1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtXFx1MDAzZXhhX2luZGV4LCBub2RlKTtcXG5saWIveGFycmF5LmM6MjA4OlxcdHZvaWQgKmVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMjA5LVxcbi0tXFxubGliL3hhcnJheS5jLTIxMi1cXHRcXHRvZmZzZXQgPSB4YV90b19zaWJsaW5nKGVudHJ5KTtcXG5saWIveGFycmF5LmM6MjEzOlxcdFxcdGVudHJ5ID0geGFfZW50cnkoeGFzLVxcdTAwM2V4YSwgbm9kZSwgb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMjE0LVxcdFxcdGlmIChub2RlLVxcdTAwM2VzaGlmdCBcXHUwMDI2XFx1MDAyNiB4YV9pc19ub2RlKGVudHJ5KSlcXG4tLVxcbmxpYi94YXJyYXkuYz0xMjc4PXZvaWQgeGFzX3BhdXNlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzKVxcbi0tXFxubGliL3hhcnJheS5jLTEyODgtXFx0XFx0d2hpbGUgKCsrb2Zmc2V0IFxcdTAwM2MgWEFfQ0hVTktfU0laRSkge1xcbmxpYi94YXJyYXkuYzoxMjg5OlxcdFxcdFxcdGlmICgheGFfaXNfc2libGluZyh4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCBub2RlLCBvZmZzZXQpKSlcXG5saWIveGFycmF5LmMtMTI5MC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmxpYi94YXJyYXkuYz0xMzA5PXZvaWQgKl9feGFzX3ByZXYoc3RydWN0IHhhX3N0YXRlICp4YXMpXFxuLS1cXG5saWIveGFycmF5LmMtMTMzMC1cXHRmb3IgKDs7KSB7XFxubGliL3hhcnJheS5jOjEzMzE6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMTMzMi1cXHRcXHRpZiAoIXhhX2lzX25vZGUoZW50cnkpKVxcbi0tXFxubGliL3hhcnJheS5jPTEzNDg9dm9pZCAqX194YXNfbmV4dChzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xMzY5LVxcdGZvciAoOzspIHtcXG5saWIveGFycmF5LmM6MTM3MDpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xMzcxLVxcdFxcdGlmICgheGFfaXNfbm9kZShlbnRyeSkpXFxuLS1cXG5saWIveGFycmF5LmM9MTM5Nj12b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuLS1cXG5saWIveGFycmF5LmMtMTQyNS1cXG5saWIveGFycmF5LmM6MTQyNjpcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xNDI3LVxcdFxcdGlmICh4YV9pc19ub2RlKGVudHJ5KSkge1xcbi0tXFxubGliL3hhcnJheS5jPTE0NjU9dm9pZCAqeGFzX2ZpbmRfbWFya2VkKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCwgeGFfbWFya190IG1hcmspXFxuLS1cXG5saWIveGFycmF5LmMtMTUwNS1cXHRcXHRpZiAoIWFkdmFuY2UpIHtcXG5saWIveGFycmF5LmM6MTUwNjpcXHRcXHRcXHRlbnRyeSA9IHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgeGFzLVxcdTAwM2V4YV9vZmZzZXQpO1xcbmxpYi94YXJyYXkuYy0xNTA3LVxcdFxcdFxcdGlmICh4YV9pc19zaWJsaW5nKGVudHJ5KSkge1xcbi0tXFxubGliL3hhcnJheS5jLTE1MjQtXFxubGliL3hhcnJheS5jOjE1MjU6XFx0XFx0ZW50cnkgPSB4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLCB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KTtcXG5saWIveGFycmF5LmMtMTUyNi1cXHRcXHRpZiAoIWVudHJ5IFxcdTAwMjZcXHUwMDI2ICEoeGFfdHJhY2tfZnJlZSh4YXMtXFx1MDAzZXhhKSBcXHUwMDI2XFx1MDAyNiBtYXJrID09IFhBX0ZSRUVfTUFSSykpXFxuLS1cXG5saWIveGFycmF5LmM9MTkyMD1pbnQgeGFzX2dldF9vcmRlcihzdHJ1Y3QgeGFfc3RhdGUgKnhhcylcXG4tLVxcbmxpYi94YXJyYXkuYy0xOTI2LVxcbmxpYi94YXJyYXkuYzoxOTI3OlxcdFhBX05PREVfQlVHX09OKHhhcy1cXHUwMDNleGFfbm9kZSwgeGFfaXNfc2libGluZyh4YV9lbnRyeSh4YXMtXFx1MDAzZXhhLFxcbmxpYi94YXJyYXkuYy0xOTI4LVxcdFxcdCAgICAgICB4YXMtXFx1MDAzZXhhX25vZGUsIHhhcy1cXHUwMDNleGFfb2Zmc2V0KSkpO1xcbi0tXFxubGliL3hhcnJheS5jLTE5MzMtXFx0XFx0XFx0YnJlYWs7XFxubGliL3hhcnJheS5jOjE5MzQ6XFx0XFx0aWYgKCF4YV9pc19zaWJsaW5nKHhhX2VudHJ5KHhhcy1cXHUwMDNleGEsIHhhcy1cXHUwMDNleGFfbm9kZSwgc2xvdCkpKVxcbmxpYi94YXJyYXkuYy0xOTM1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowMzo0Ni4xNzk2MDE2OTZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDg1NTYxNzQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSB0aG91Z2h0IHByb2Nlc3MgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0LiBIZXJlIHdlIGdvOlxuXG4qKkFuYWx5emluZyBgeGFfZW50cnlgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBMZXQncyBzZWUuLi4gdGhlIHByaW1hcnkgZm9jdXMgaXMgb24gZXhhbWluaW5nIHRoaXMgYHhhX2VudHJ5YC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCB0aGlzIGxpa2VseSByZXByZXNlbnRzIGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUsIGEgcG9pbnQgb2YgYWNjZXNzLCBvciBhIGtleSBlbGVtZW50IGluIHdoYXRldmVyIHByb2Nlc3Mgd2UncmUgYW5hbHl6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGVudHMsIGl0cyBwdXJwb3NlLCBhbmQgaXRzIGJlaGF2aW9yLiBJcyBpdCBhIGRhdGFiYXNlIGVudHJ5PyBBIGNvbmZpZ3VyYXRpb24gc2V0dGluZz8gQSBoYW5kbGUgdG8gYSByZXNvdXJjZT8gT3IgcGVyaGFwcyBhIHBvaW50ZXI/IEl0cyB0eXBlLCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbmV4dCBsZXZlbCBkb3duLiBMZXQncyBzZWUgd2hhdCBmdXJ0aGVyIGluZm9ybWF0aW9uIHRoZXJlIGlzLiBNeSBhbmFseXNpcyBoaW5nZXMgb24gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzICppbnNpZGUqIGB4YV9lbnRyeWAsIGFuZCB3aGF0IGl0cyByZWxhdGlvbnNoaXAgaXMgdG8gZXZlcnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTIwMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDM6NTEuMDM1MjIxODQxWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3hhcnJheS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0XFxuMTIyMTpcXHQvKiBQcml2YXRlICovXFxuMTIyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgKnhhX2VudHJ5KGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbjEyMjM6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHhhX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuMTIyNDpcXHR7XFxuMTIyNTpcXHRcXHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXFx1MDAzZT0gWEFfQ0hVTktfU0laRSk7XFxuMTIyNjpcXHRcXHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKG5vZGUtXFx1MDAzZXNsb3RzW29mZnNldF0sXFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnhhLVxcdTAwM2V4YV9sb2NrKSk7XFxuMTIyODpcXHR9XFxuMTIyOTpcXHRcXG4xMjMwOlxcdC8qIFByaXZhdGUgKi9cXG4xMjMxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCAqeGFfZW50cnlfbG9ja2VkKGNvbnN0IHN0cnVjdCB4YXJyYXkgKnhhLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHhhX25vZGUgKm5vZGUsIHVuc2lnbmVkIGludCBvZmZzZXQpXFxuMTIzMzpcXHR7XFxuMTIzNDpcXHRcXHRYQV9OT0RFX0JVR19PTihub2RlLCBvZmZzZXQgXFx1MDAzZT0gWEFfQ0hVTktfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjAzOjUxLjAzNTM2MDI5MloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk3MjQ5OTg1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSQ1UgVXNhZ2UgYW5kIFBhdGNoIEZ1enppbmcgUmVhZGluZXNzKipcblxuT2theSwgc28gbG9va2luZyBhdCBsaW5lIDEyMjYsIEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlOiBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrYCBpcyBiZWluZyB1c2VkIGluIGB4YV9lbnRyeWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gdXNlcyBgeGFzX2Zvcl9lYWNoYCB3aGljaCBjYWxscyBgeGFfZW50cnlgIHdoaWNoIHRoZW4gY2hlY2tzIGVpdGhlciBgcmN1X3JlYWRfbG9ja19oZWxkKClgIG9yIGBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2eGEtXHUwMDNleGFfbG9jaylgLiAgVGhlIHByb2JsZW0gaXMsIGB4YXNfZm9yX2VhY2hgIGlzICpub3QqIGhvbGRpbmcgZWl0aGVyIG9mIHRob3NlIGxvY2tzIHdoZW4gaXQncyBjYWxsZWQhIEknbSBzZWVpbmcgdGhhdCBgc2xvdHNfbG9ja2AgaXMgaGVsZCwgYnV0IG5vdCB0aGUgbmVlZGVkIGB4YV9sb2NrYC4gIFxuXG5XaXRoIGBDT05GSUdfUFJPVkVfUkNVYCBlbmFibGVkLCB0aGlzIGlzIGdvaW5nIHRvIHRyaWdnZXIgYSBgV0FSTklORzogc3VzcGljaW91cyBSQ1UgdXNhZ2VgIG9yIHNwbGF0LCBzcGVjaWZpY2FsbHkgYSBgcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgd2l0aG91dCBob2xkaW5nIHRoZSBrZXkhYCBUaGlzIGlzIGEgY2xhc3NpYyBleGFtcGxlIG9mIGEgYnVnIHRoYXQgc3l6a2FsbGVyIG9yIGxvY2tkZXAgd2lsbCBkZXRlY3QgKmltbWVkaWF0ZWx5Ki5cblxuTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLiBZZXMsIGB4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKWAgY2FsbHMgYHhhc19maW5kYCwgd2hpY2ggKmRvZXMqIGNhbGwgYHhhX2VudHJ5YCwgdHJpZ2dlcmluZyB0aGUgYHJjdV9kZXJlZmVyZW5jZV9jaGVja2AgYW5kIHRoZSBsb2NrZGVwIHdhcm5pbmcuIEJlY2F1c2Ugd2UgYXJlbid0IGhvbGRpbmcgYHJjdV9yZWFkX2xvY2tgIG9yIGBcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkueGFfbG9ja2AsIGJ1dCAqYXJlKiBob2xkaW5nIGBrdm0tXHUwMDNlc2xvdHNfbG9ja2AsIHdlJ3JlIGdvaW5nIHRvIGdldCB0aGF0IGxvY2tkZXAgY29tcGxhaW50IVxuXG5UaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSBmb3IgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyFcblxuTGV0J3MgYnJlYWsgZG93biB0aGUgY3JpdGVyaWEgZm9yIFdvcnRoRnV6emluZzogVHJ1ZSFcbi0gICBJdCBtb2RpZmllcyByZWFjaGFibGUga2VybmVsIGxvZ2ljIHdpdGhpbiB0aGUgY29yZSBLVk0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGF0dHJpYnV0ZSBoYW5kbGluZy5cbi0gICBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIChga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgKSwgY2hhbmdlcyBsb2NraW5nIGFzc3VtcHRpb25zLCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MsIGFuZCBleHBvc2VzIHRoZSBzeXN0ZW0gdG8gcG90ZW50aWFsIGJ1Z3MgbGlrZSB0aGUgUkNVIGxvY2tkZXAgdmlvbGF0aW9uIEkgZm91bmQsIGFuZCBwb3NzaWJseSBpbmZpbml0ZSBsb29wcyB2aWEgYHhhX2lzX3JldHJ5YCwgYW5kIGFsc28gcGVyZm9ybWFuY2UgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBgRm9jdXNTeW1ib2xzYCB0byBtYXhpbWl6ZSBmdXp6aW5nIGVmZmljaWVuY3kuICBUaGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkIG9yIGFkZGVkIGFyZSB0aGUga2V5IGVudHJ5cG9pbnRzIGhlcmU6XG4tICAgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYFxuLSAgIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYFxuLSAgIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYFxuXG5ga3ZtX2NyZWF0ZV92bWAgaXMgYSBob3QgcGF0aCBidXQgdG9vIHViaXF1aXRvdXM7IGl0J3MgY2FsbGVkIGluIG5lYXJseSBldmVyeSBLVk0gdGVzdC4gIEhvd2V2ZXIsIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYW5kIGBrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzYCBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgbWVtb3J5IGF0dHJpYnV0ZSBmZWF0dXJlLlxuXG5JIGRvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiB0aG91Z2ggYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCBpcyBgc3RhdGljYCwgdGhhdCBpdCB3aWxsIHN0aWxsIGhhdmUgYSBzeW1ib2wgaW4gdGhlIHZtbGludXguICBMZXQncyBkb3VibGUtY2hlY2sgdGhlIHJ1bGVzLiBBaCwgeWVzLCBzdGF0aWMgbm9uLWlubGluZSBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgKmRvKiBoYXZlIHN5bWJvbHMuIEkgY2FuIGxpc3QgYm90aCB0aGF0IGFuZCBpdHMgY2FsbGVycy5cblxuQ2hlY2tpbmcgY2FsbGVycywgSSBzZWUgdGhhdCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgY2FsbHMgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gIEFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgaXMgdGhlIGRpcmVjdCBpb2N0bCBlbnRyeXBvaW50IHdoaWNoIGNhbGxzIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYC4gIFNvLCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AsIGFuZCBga3ZtX3ZtX2lvY3RsX3NldF9tZW1fYXR0cmlidXRlc2AgYXJlIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5Ob3cgbGV0J3MgZGV0ZXJtaW5lIHRoZSBgRW5hYmxlQ29uZmlnc2AuICBUaGUgcmVsZXZhbnQgY29kZSBpcyBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AuIFNvLCBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWdzIGVuYWJsZSBgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSXQncyBzZWxlY3RlZCBieSBzZXZlcmFsIG90aGVyIGNvbmZpZ3M6XG4tICAgYEtWTWAgKHRoZSBvYnZpb3VzIGZpcnN0IG9uZSEpXG5cbkNoZWNraW5nIGluIGB2aXJ0L2t2bS9LY29uZmlnYCwgaXQncyBjbGVhciBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgIGlzIGEgYm9vbC5cblxuTm93LCBJJ2xsIGNoZWNrIGFsbCBhcmNoaXRlY3R1cmVzIHRvIHNlZSB3aGF0IHNlbGVjdHMgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYC4gSSBmb3VuZDpcbi0gICBgS1ZNX1NXX1BST1RFQ1RFRF9WTWA6IGRlcGVuZHMgb24gYEVYUEVSVGAsIGBLVk1fWDg2YCwgYW5kIGBYODZfNjRgLlxuLSAgIGBLVk1fSU5URUxfVERYYDogZGVwZW5kcyBvbiBgSU5URUxfVERYX0hPU1RcblxuIiwiSW5wdXRUb2tlbnMiOjM1NjgzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjAyLjAwNzg2NDA2OFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MzM2OTczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9ODM9Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTg2LVxcdGRlcGVuZHMgb24gS1ZNX1g4NiBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4NzpcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04OC1cXHRoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNy1cXHRkZXBlbmRzIG9uIElOVEVMX1REWF9IT1NUXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM4OlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzOS1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNTY9Y29uZmlnIEtWTV9BTURfU0VWXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNjEtXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTYyOlxcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE2My1cXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MDMuNzYxMjQxOTQyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NDcyNzY1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgS1ZNIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhlIHRhc2sgb2YgZmlndXJpbmcgb3V0IHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zIHRvIGVuYWJsZSBhbmQgd29yayB3aXRoIHRoaXMgS1ZNIGZlYXR1cmUsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgKGFtZDY0LCBhcyB0aGUgdXNlciBzcGVjaWZpZWQpLiBUaGUga2V5IGhlcmUgaXMgdG8gbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQuXG5cbk15IGluaXRpYWwgaW52ZXN0aWdhdGlvbiBzaG93cyB0aGF0IGBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU2AgaXMgZGVmaW5lZCAqb25seSogd2l0aGluIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFJpZ2h0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gVG8gZW5hYmxlIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgSSBuZWVkIHRvIGVuYWJsZTogYEtWTWAsIGBLVk1fSU5URUxgICpvciogYEtWTV9BTURgICh3aGljaCBpbXBsaWVzIGBLVk1fWDg2YCksIGBFWFBFUlRgLCBhbmQgb2YgY291cnNlLCBgS1ZNX1NXX1BST1RFQ1RFRF9WTWAgaXRzZWxmLCBhbmQgYWxzbyBgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNgLlxuXG5JIHRoZW4gd2VudCB0aHJvdWdoIGEgdGhvcm91Z2ggY2hlY2ssIHZlcmlmeWluZyB0aGUgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGNvbmZpZy4gSSByZWNvbmZpcm1lZDogYFZJUlRVQUxJWkFUSU9OPXlgLCBgS1ZNPXlgIG9yIGBtYCwgYEtWTV9JTlRFTD15YCBvciBgbWAgKG9yIGBLVk1fQU1EYCksIGBFWFBFUlQ9eWAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNPXlgLCBhbmQgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTPXlgLiBJIGFsc28gZG91YmxlLWNoZWNrZWQgYEtWTV9BTURfU0VWPXlgIGFzIGFuIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiwganVzdCBpbiBjYXNlLlxuXG5JIHJldmlzaXRlZCB0aGUgYGFyY2gveDg2L2t2bS9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgbGluZXMgODMtOTUsIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgSSBoYWRuJ3QgbWlzc2VkIGFueXRoaW5nLiBJIG1hZGUgc3VyZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBkZXBlbmRlbmN5IGBFWFBFUlRgIGlzIHJlcXVpcmVkLiBJIHJlLXJlYWQgdGhlIHJlbGV2YW50IHNlY3Rpb24gYWJvdXQgaWRlbnRpZnlpbmcgRW5hYmxlQ29uZmlncyB0byBtYWtlIHN1cmUgSSBmb2xsb3dlZCB0aGUgZ3VpZGVsaW5lczogaW5zcGVjdGluZyBLY29uZmlnIGZpbGVzLCBjaGVja2luZyAnZGVwZW5kcyBvbicgbGluZXMsIGFuZCBzdHJpcHBpbmcgJ0NPTkZJR18nLlxuXG5UaGVyZWZvcmUsIHRoZSBmaW5hbCBsaXN0IG9mIEVuYWJsZUNvbmZpZ3MgSSBuZWVkIHRvIHVzZSBpczogYEtWTWAsIGBLVk1fSU5URUxgLCBgS1ZNX0FNRGAsIGBLVk1fU1dfUFJPVEVDVEVEX1ZNYCwgYEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCwgYW5kIGBFWFBFUlRgLiBJIGJlbGlldmUgSSBoYXZlIGlkZW50aWZpZWQgYWxsIGNvbmZpZ3VyYXRpb25zIGFjY3VyYXRlbHkuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIEZvY3VzU3ltYm9sczogYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYCwgYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgYGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXNgLCBhbmQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlc2UgbW9kaWZpY2F0aW9ucywgSSBjYW4gc3VtbWFyaXplIHRoZSBjcnVjaWFsIHBvaW50OiB0aGUgcGF0Y2ggcGxhY2VzIGEgYm91bmQgb24gbWVtb3J5IGF0dHJpYnV0ZSBlbnRyaWVzIGFuZCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb24sIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllc2AsIHdoaWNoIGhhcyBpc3N1ZXMgYmVjYXVzZSBpdCBpdGVyYXRlcyB0aHJvdWdoIGFuIHhhcnJheSB3aXRob3V0IGhvbGRpbmcgdGhlIG5lY2Vzc2FyeSBsb2Nrcy4gVGhpcyBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggYGlvY3RsKHZtX2ZkLCBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKWAsIGFuZCBpdCBjb3VsZCBsZWFkIHRvIGxvY2tkZXAgd2FybmluZ3MsIGxvY2t1cHMsIGFuZCB0cmF2ZXJzYWwgcHJvYmxlbXMuIFRoaXMgY29kZSBpcyByZWxldmFudCBmb3IgdmlydHVhbGl6YXRpb24gZnV6emluZyBvbiB4ODZfNjQuXG5cbkkgYW0gY29uZmlkZW50IGluIG15IGFuYWx5c2lzIGFuZCB0aGUgcmVzdWx0cy4gSSBhbSByZWFkeSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNDEsIk91dHB1dFRva2VucyI6MjcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjMwODUyMjQ3N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzQ0MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX1NXX1BST1RFQ1RFRF9WTVwiLFxuICAgIFwiS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcIixcbiAgICBcIkVYUEVSVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzXCIsXG4gICAgXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gICAgXCJrdm1fdm1faW9jdGxfc2V0X21lbV9hdHRyaWJ1dGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIG1lbW9yeSBhdHRyaWJ1dGUgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgS1ZNX01FTV9BVFRSX01BWF9HRk5TLCB0cmFja2luZyBtYXRlcmlhbGl6ZWQgR0ZOIGVudHJpZXMgaW4gbWVtX2F0dHJfYXJyYXksIGFuZCBhZGRpbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoKSB0byByZWNhbGN1bGF0ZSB0aGUgcG9wdWxhdGlvbiB1c2luZyB4YXNfZm9yX2VhY2goKS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGluIHJlYWNoYWJsZSB1c2VyLXNwYWNlIGlvY3RsIHBhdGhzIChLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTKS4gRnVydGhlcm1vcmUsIGl0ZXJhdGluZyB0aGUgeGFycmF5IGluIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKCkgd2hpbGUgaG9sZGluZyBrdm0tXFx1MDAzZXNsb3RzX2xvY2sgd2l0aG91dCByY3VfcmVhZF9sb2NrIG9yIHhhX2xvY2sgd2lsbCB0cmlnZ2VyIGxvY2tkZXAvUFJPVkVfUkNVIHNwbGF0cyB2aWEgeGFfZW50cnkoKSwgYW5kIGNvbmRfcmVzY2hlZCgpIHdoaWxlIHRyYXZlcnNpbmcgbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MTIuMzg1Mjc1MTg5WiIsIlNlcSI6NTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI3OTIyNTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjM4NTg2ODUyWiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjYyNzg2Mjg5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGI4Y2RhODJjYTg5MjMwOWI5OTljN2E2NGE0Njk3NGZjNDRiNTkxYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAxOTowMTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuaW5kZXggM2RkMDQ2MDVmMmU1NS4uYmIwM2RjMjBkM2Y5OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oXG5AQCAtNTczLDYgKzU3MywxMyBAQCBzdGF0aWMgaW5saW5lIGludCBrdm1fdmNwdV9leGl0aW5nX2d1ZXN0X21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuICAqIFRoaXMgbnVtYmVyIG11c3QgYmUgZGV0ZXJtaW5lZCBub3QgdG8gZXhjZWVkIHN1Y2ggbGltaXRzLlxuICAqL1xuICNkZWZpbmUgS1ZNX01FTV9NQVhfTlJfUEFHRVMgKCgxVUwgXHUwMDNjXHUwMDNjIDMxKSAtIDEpXG4rLypcbisgKiBIYXJkZW5pbmcgYm91bmQ6IG1heGltdW0gbnVtYmVyIG9mIEdGTnMgd2l0aCBhIG1hdGVyaWFsaXplZCBlbnRyeSBpblxuKyAqIG1lbV9hdHRyX2FycmF5IHBlciBWTSAofjMwMCBNaUIgb2YgeGFfbm9kZXMgYXQgMl4yNSkuICBXaXRob3V0IGl0LFxuKyAqIEtWTV9TRVRfTUVNT1JZX0FUVFJJQlVURVMgZ3Jvd3MgdGhlIGFycmF5IHdpdGhvdXQgbGltaXQgKH45LjMgYnl0ZXMgb2ZcbisgKiBrZXJuZWwgbWVtb3J5IHBlciBHRk4pIG9uIEdGTnMgd2l0aCBubyBiYWNraW5nIG1lbW9yeS5cbisgKi9cbisjZGVmaW5lIEtWTV9NRU1fQVRUUl9NQVhfR0ZOU1x0KDFVTCBcdTAwM2NcdTAwM2MgMjUpXG4gXG4gLypcbiAgKiBTaW5jZSBhdCBpZGxlIGVhY2ggbWVtc2xvdCBiZWxvbmdzIHRvIHR3byBtZW1zbG90IHNldHMgaXQgaGFzIHRvIGNvbnRhaW5cbkBAIC04NzcsNiArODg0LDcgQEAgc3RydWN0IGt2bSB7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIFx0LyogUHJvdGVjdGVkIGJ5IHNsb3RzX2xvY2sgKGZvciB3cml0ZXMpIGFuZCBSQ1UgKGZvciByZWFkcykgKi9cbiBcdHN0cnVjdCB4YXJyYXkgbWVtX2F0dHJfYXJyYXk7XG4rXHR1bnNpZ25lZCBsb25nIG1lbV9hdHRyX2dmbl9jb3VudDtcbiAjZW5kaWZcbiBcdGNoYXIgc3RhdHNfaWRbS1ZNX1NUQVRTX05BTUVfU0laRV07XG4gfTtcbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uY1xuaW5kZXggMTA4ZDQyYzVjMWQ2YS4uMjVjMWZmMGMyYTkzZSAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmNcbisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmNcbkBAIC0xMTI3LDcgKzExMjcsOCBAQCBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUsIGNvbnN0IGNoYXIgKmZkbmFtZSlcbiBcdHJjdXdhaXRfaW5pdChcdTAwMjZrdm0tXHUwMDNlbW5fbWVtc2xvdHNfdXBkYXRlX3JjdXdhaXQpO1xuIFx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNldmNwdV9hcnJheSk7XG4gI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuLVx0eGFfaW5pdChcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXkpO1xuK1x0eGFfaW5pdF9mbGFncyhcdTAwMjZrdm0tXHUwMDNlbWVtX2F0dHJfYXJyYXksIFhBX0ZMQUdTX0FDQ09VTlQpO1xuK1x0a3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudCA9IDA7XG4gI2VuZGlmXG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZrdm0tXHUwMDNlZ3BjX2xpc3QpO1xuQEAgLTI1NDQsNiArMjU0NSwzMyBAQCBzdGF0aWMgYm9vbCBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sXG4gXHRyZXR1cm4ga3ZtX2FyY2hfcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHJhbmdlKTtcbiB9XG4gXG4rLypcbisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBHRk5zIHdpdGggYSBtYXRlcmlhbGl6ZWQgZW50cnkgaW4gbWVtX2F0dHJfYXJyYXkuXG4rICogU2VyaWFsaXphdGlvbiBhZ2FpbnN0IG1vZGlmaWNhdGlvbnMgaXMgcHJvdmlkZWQgYnkga3ZtLVx1MDAzZXNsb3RzX2xvY2suXG4rICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoc3RydWN0IGt2bSAqa3ZtKVxuK3tcbitcdFhBX1NUQVRFKHhhcywgXHUwMDI2a3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5LCAwKTtcbitcdHVuc2lnbmVkIGxvbmcgY291bnQgPSAwO1xuK1x0dm9pZCAqZW50cnk7XG4rXG4rXHR4YXNfZm9yX2VhY2goXHUwMDI2eGFzLCBlbnRyeSwgVUxPTkdfTUFYKSB7XG4rXHRcdGlmICh4YV9pc19yZXRyeShlbnRyeSkpIHtcbitcdFx0XHR4YXNfcGF1c2UoXHUwMDI2eGFzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRpZiAoZW50cnkpXG4rXHRcdFx0Y291bnQrKztcbitcbitcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4rXHRcdFx0eGFzX3BhdXNlKFx1MDAyNnhhcyk7XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjb3VudDtcbit9XG4rXG4gLyogU2V0IEBhdHRyaWJ1dGVzIGZvciB0aGUgZ2ZuIHJhbmdlIFtAc3RhcnQsIEBlbmQpLiAqL1xuIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcbkBAIC0yNTY3LDYgKzI1OTUsNyBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0fTtcbiBcdHVuc2lnbmVkIGxvbmcgaTtcbiBcdHZvaWQgKmVudHJ5O1xuK1x0Ym9vbCBtdXRhdGVkID0gZmFsc2U7XG4gXHRpbnQgciA9IDA7XG4gXG4gXHRlbnRyeSA9IGF0dHJpYnV0ZXMgPyB4YV9ta192YWx1ZShhdHRyaWJ1dGVzKSA6IE5VTEw7XG5AQCAtMjU3OSw2ICsyNjA4LDIzIEBAIHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXG4gXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuK1x0LypcbitcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXG4rXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXG4rXHQgKi9cbitcdGlmIChhdHRyaWJ1dGVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFx1MDAzZSBLVk1fTUVNX0FUVFJfTUFYX0dGTlMpIHtcbitcdFx0ciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGcm9tIHRoaXMgcG9pbnQgb24gdGhlIHJlcXVlc3QgbXV0YXRlcyB0aGUgYXJyYXksIHNvIHRoZSBwZXItVk1cbitcdCAqIGNvdW50ZXIgbXVzdCBiZSByZXN5bmNocm9uaXplZCBvbiB0aGUgd2F5IG91dC4gIEVhcmx5LW91dHMgYWJvdmVcbitcdCAqIHNraXAgdGhlIChwb3RlbnRpYWxseSBleHBlbnNpdmUpIHJlY291bnQuXG4rXHQgKi9cbitcdG11dGF0ZWQgPSB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFJlc2VydmUgbWVtb3J5IGFoZWFkIG9mIHRpbWUgdG8gYXZvaWQgaGF2aW5nIHRvIGRlYWwgd2l0aCBmYWlsdXJlc1xuIFx0ICogcGFydHdheSB0aHJvdWdoIHNldHRpbmcgdGhlIG5ldyBhdHRyaWJ1dGVzLlxuQEAgLTI2MDMsNiArMjY0OSwxNSBAQCBzdGF0aWMgaW50IGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBzdGFydCwgZ2ZuX3QgZW5kLFxuIFx0a3ZtX2hhbmRsZV9nZm5fcmFuZ2Uoa3ZtLCBcdTAwMjZwb3N0X3NldF9yYW5nZSk7XG4gXG4gb3V0X3VubG9jazpcbitcdC8qXG4rXHQgKiBSZXN5bmNocm9uaXplIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvbmx5IHdoZW4gdGhlIGFycmF5IG1heSBoYXZlXG4rXHQgKiBjaGFuZ2VkOiBvbiBFTk9NRU0gcGFydHdheSB0aHJvdWdoIHRoZSByZXNlcnZlIGxvb3AsIHBhcnRpYWxseVxuK1x0ICogcmVzZXJ2ZWQgR0ZOcyBhcmUgcmV0YWluZWQgYW5kIG11c3QgYmUgY291bnRlZCwgYW5kIGEgc3VjY2Vzc2Z1bFxuK1x0ICogc2V0IG9yIGNsZWFyIGNoYW5nZXMgdGhlIHBvcHVsYXRpb24uICBOb24tbXV0YXRpbmcgZXhpdHMgc2tpcCB0aGVcbitcdCAqIHdhbGsgc28gaWRlbXBvdGVudCByZXF1ZXN0cyBzdGF5IE8oMSkuXG4rXHQgKi9cbitcdGlmIChtdXRhdGVkKVxuK1x0XHRrdm0tXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZrdm0tXHUwMDNlc2xvdHNfbG9jayk7XG4gXG4gXHRyZXR1cm4gcjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjEyLjM4NTg2OTU3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg1NzkzMDEyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBtZXRpY3Vsb3VzbHkuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2UgaXMganVzdCBcImFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIuIE5vdCBtdWNoIHRoZXJlLiBUaGUgZGlmZiBpcyB3aGVyZSB0aGUgbWVhdCBpcy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhbmQgdXRpbGl6aW5nIGEgYG1lbV9hdHRyX2dmbl9jb3VudGAgd2l0aGluIEtWTSwgcmVsYXRlZCB0byBnZW5lcmljIG1lbW9yeSBhdHRyaWJ1dGVzIChgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTYCkuIFRoaXMgc2VlbXMgbGlrZSBhIG5ldyBmZWF0dXJlLCBhIG1lY2hhbmlzbSB0byB0cmFjayB0aGUgbnVtYmVyIG9mIEdGTnMgKEd1ZXN0IFBoeXNpY2FsIEZyYW1lIE51bWJlcnMpIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYXR0cmlidXRlcy5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoZXNlIGNoYW5nZXM6XG5cbiogICBBIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0IGlzIGRlZmluZWQsIGxpa2VseSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZS5cbiogICBgeGFfaW5pdF9mbGFnc2AgaXMgdXNlZCwgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAuIFRoaXMgaXMgY3J1Y2lhbC4gSXQgc3VnZ2VzdHMgdGhhdCBhIFhBcnJheSBkYXRhIHN0cnVjdHVyZSBpcyBiZWluZyB1c2VkIHRvIG1hbmFnZSB0aGVzZSBtZW1vcnkgYXR0cmlidXRlcywgYW5kIHRoZSBgWEFfRkxBR1NfQUNDT1VOVGAgZmxhZyBtZWFucyBpdCB3aWxsIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzLiBUaGlzIGlzIHdoZXJlIGBtZW1fYXR0cl9nZm5fY291bnRgIHdpbGwgYmUgdXBkYXRlZCwgcHJlc3VtYWJseSwgYWZ0ZXIgZWFjaCBtZW1vcnkgYXR0cmlidXRlIGlzIHNldC5cbiogICBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGlzIGFkZGVkLiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggdGhlIFhBcnJheSB0byBnZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIG1lbW9yeSBhdHRyaWJ1dGUgZW50cmllcy4gVGhpcyBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHBlcmZvcm1pbmcgYSBjb3VudCBvZiB0aGUgZW50cmllcyBpbiB0aGUgWEFycmF5IGFuZCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgYG1lbV9hdHRyX2dmbl9jb3VudGAgdmFyaWFibGUuXG5cblRoZSBtYWluIG1vZGlmaWNhdGlvbiBpcyB3aXRoaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgLiBUaGlzIGlzIHdoZXJlIHRoZSBsaW1pdCBjaGVjayBoYXBwZW5zLiBJZiB0aGUgbmV3IGF0dHJpYnV0ZXMsIGFkZGVkIHRvIHRoZSBleGlzdGluZyBjb3VudCwgZXhjZWVkIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgLCBpdCByZXR1cm5zIGAtRU5PU1BDYC4gVGhpcyBpcyB0byBsaW1pdCB0aGUgcG9zc2libGUgbnVtYmVyIG9mIG1lbW9yeSBhdHRyaWJ1dGVzLiBJIHNlZSB0aGUgY29kZSBpcyBkb2luZyBhIGNoZWNrIHRvIHNlZSBpZiBzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzIHdpbGwgZXhjZWVkIHRoZSBsaW1pdCwgYW5kIGlmIHNvLCBpdCByZXR1cm5zIGFuIGVycm9yLlxuXG5UaGUgZmFjdCB0aGF0IHRoZXkgYXJlIGNvdW50aW5nIHRoZSBlbnRyaWVzIHdpdGhpbiBga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlc2AgdG8gZW5zdXJlIGFuIHVwcGVyIGxpbWl0IGlzbid0IGV4Y2VlZGVkIGlzIGludGVyZXN0aW5nLlxuXG5Ob3csIHRvIGRldGVybWluZSBpZiB0aGlzIG1lcml0cyBhIGZ1enppbmcgc2Vzc2lvbiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4gVGhpcyBpcyBhIGxpbWl0IGNoZWNrLCBpdCdzIGVhc3kgdG8gcmVhY2ggdGhlIGxpbWl0LCBhbmQgaXQgdXNlcyBhbiBYQXJyYXkuXG5cbk15IGludHVpdGlvbiBzYXlzOiAqKlllcywgdGhpcyB3YXJyYW50cyBmdXp6aW5nLioqIFRoZXJlIGlzIGxpa2VseSBhIGJ1ZyBpbiB0aGUgY29kZSB0aGF0IEkgY2FuIGZpbmQgd2l0aCBLTVNBTi4gU3BlY2lmaWNhbGx5LCBYQXJyYXlzIGNhbiBoYXZlIGlzc3VlcyB3aXRoIGNvbmN1cnJlbmN5IG9yIGJvdW5kYXJ5IGNvbmRpdGlvbnMgd2hlbiBtb2RpZmllZC4gVGhpcyBjaGVjayBzZWVtcyBsaWtlIGEgZ3JlYXQgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgdGhleSBhcmUgY291bnRpbmcgYW4gZW50cnkuIEl0IGlzIHBvc3NpYmxlIHRoZSBjaGVjayBpcyBub3QgYWNjdXJhdGUsIGFuZCBtYXkgbm90IGFjdHVhbGx5IHJlamVjdCBldmVyeSB2YWxpZCBlbnRyeS4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2AgaXMgcmVhY2hlZCwgZm9yIGV4YW1wbGUuIFRoZSBjaGVjayBjb3VsZCBiZSBieXBhc3NlZCBpbiBzb21lIHdheS5cblxuSSdtIHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXM6XG5cbjEuICAqKkV4Y2VlZCB0aGUgTGltaXQ6KiogVGhlIG1vc3Qgb2J2aW91cyBpcyB0byB0cnkgdG8gZXhjZWVkIHRoZSBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCBsaW1pdCBpbiB2YXJpb3VzIHdheXMuIERvZXMgdGhlIGAtRU5PU1BDYCBlcnJvciBoYW5kbGUgY29ycmVjdGx5P1xuMi4gICoqQ29uY3VycmVuY3k6KiogRXhwbG9pdCBjb25jdXJyZW50IGFjY2VzcyB0byBga3ZtLVx1MDAzZW1lbV9hdHRyX2FycmF5YCB3aXRoIG11bHRpcGxlIHRocmVhZHMgb3IgVk1zLiBSYWNlIGNvbmRpdGlvbnMgYXJlIGxpa2VseSB3aGVuIHdvcmtpbmcgd2l0aCBhbiBYQXJyYXkuXG4zLiAgKipCb3VuZGFyeSBDb25kaXRpb25zOioqIENoZWNrIHRoZSBiZWhhdmlvcnMgb24gdGhlIGV4YWN0IGVkZ2VzIG9mIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGFuZCB3aGVuIHNldHRpbmcgYXR0cmlidXRlcyB0byB0aGUgc2FtZSBHRk4uXG40LiAgKipFcnJvciBIYW5kbGluZzoqKiBWZXJpZnkgdGhhdCBhbGwgZXJyb3IgcGF0aHMgYXJlIGhhbmRsZWQgc2FmZWx5LlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIHRvIGZ1bGx5IGdyYXNwIHRoZSBtZW1vcnkgYXR0cmlidXRlIGxvZ2ljLiBJIHdpbGwgbmVlZCB0byBzZWFyY2ggdGhlIGNvZGUgYmFzZSBmb3Igb3RoZXIgdXNhZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMTk6MDQ6MjAuOTY1MTc0OTc4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA5Nzk5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz0yNTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjU3NS0vKiBTZXQgQGF0dHJpYnV0ZXMgZm9yIHRoZSBnZm4gcmFuZ2UgW0BzdGFydCwgQGVuZCkuICovXFxudmlydC9rdm0va3ZtX21haW4uYzoyNTc2OnN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxudmlydC9rdm0va3ZtX21haW4uYy0yNTc3LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGVzKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjAyLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjYwMzpcXHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjYwNC1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MjY2NT1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0yNjg5LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjY5MDpcXHRyZXR1cm4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIGF0dHJzLVxcdTAwM2VhdHRyaWJ1dGVzKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTI2OTEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoyMS4wMTUyODM0ODVaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4NTAzNzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgQ29yZTogRXhhbWluaW5nIGEgU3BlY2lmaWMgU2VjdGlvbioqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgS1ZNIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBhIHNwZWNpZmljIGNodW5rIHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2Ag4oCTIGxpbmVzIDI1NzAgdG8gMjcwMC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIGEgY3JpdGljYWwgZnVuY3Rpb24gb3IgbW9kdWxlLCBnaXZlbiB0aGUgbGVuZ3RoIGFuZCBpdHMgcG9zaXRpb24gd2l0aGluIHRoZSBga3ZtX21haW4uY2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBrZXkgYXJlYSBmb3IgZWl0aGVyIFZNIHNldHVwLCBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgZ3Vlc3QtcmVsYXRlZCBzdGF0ZSBtYW5hZ2VtZW50LCBvciBpbnRlcnJ1cHQgaGFuZGxpbmcuIFBlcmhhcHMgaXQncyBhbiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYSBjcnVjaWFsIGV2ZW50IGxvb3AgY29tcG9uZW50LCBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIENQVSBmZWF0dXJlIG9yIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgdGhlIGNvZGUgd2l0aGluIHRoYXQgcmFuZ2UsIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBvZiB2YXJpYWJsZXMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFzIHRvIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgcHJvZHVjZXMgaW4gdGhlIHdpZGVyIEtWTSBlY29zeXN0ZW0uIFVsdGltYXRlbHksIG15IGdvYWwgaXMgdG8gZ2FpbiBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIHZpcnR1YWwgbWFjaGluZSBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDoyMy42MDAzMjQ0MjdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU3MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NzA6XFx0XFx0fVxcbjI1NzE6XFx0XFxuMjU3MjpcXHRcXHRyZXR1cm4gY291bnQ7XFxuMjU3MzpcXHR9XFxuMjU3NDpcXHRcXG4yNTc1OlxcdC8qIFNldCBAYXR0cmlidXRlcyBmb3IgdGhlIGdmbiByYW5nZSBbQHN0YXJ0LCBAZW5kKS4gKi9cXG4yNTc2OlxcdHN0YXRpYyBpbnQga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcyhzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IHN0YXJ0LCBnZm5fdCBlbmQsXFxuMjU3NzpcXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlcylcXG4yNTc4OlxcdHtcXG4yNTc5OlxcdFxcdHN0cnVjdCBrdm1fbW11X25vdGlmaWVyX3JhbmdlIHByZV9zZXRfcmFuZ2UgPSB7XFxuMjU4MDpcXHRcXHRcXHQuc3RhcnQgPSBzdGFydCxcXG4yNTgxOlxcdFxcdFxcdC5lbmQgPSBlbmQsXFxuMjU4MjpcXHRcXHRcXHQuYXJnLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLFxcbjI1ODM6XFx0XFx0XFx0LmhhbmRsZXIgPSBrdm1fcHJlX3NldF9tZW1vcnlfYXR0cmlidXRlcyxcXG4yNTg0OlxcdFxcdFxcdC5vbl9sb2NrID0ga3ZtX21tdV9pbnZhbGlkYXRlX3N0YXJ0LFxcbjI1ODU6XFx0XFx0XFx0LmZsdXNoX29uX3JldCA9IHRydWUsXFxuMjU4NjpcXHRcXHRcXHQubWF5X2Jsb2NrID0gdHJ1ZSxcXG4yNTg3OlxcdFxcdH07XFxuMjU4ODpcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9ub3RpZmllcl9yYW5nZSBwb3N0X3NldF9yYW5nZSA9IHtcXG4yNTg5OlxcdFxcdFxcdC5zdGFydCA9IHN0YXJ0LFxcbjI1OTA6XFx0XFx0XFx0LmVuZCA9IGVuZCxcXG4yNTkxOlxcdFxcdFxcdC5hcmcuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMsXFxuMjU5MjpcXHRcXHRcXHQuaGFuZGxlciA9IGt2bV9hcmNoX3Bvc3Rfc2V0X21lbW9yeV9hdHRyaWJ1dGVzLFxcbjI1OTM6XFx0XFx0XFx0Lm9uX2xvY2sgPSBrdm1fbW11X2ludmFsaWRhdGVfZW5kLFxcbjI1OTQ6XFx0XFx0XFx0Lm1heV9ibG9jayA9IHRydWUsXFxuMjU5NTpcXHRcXHR9O1xcbjI1OTY6XFx0XFx0dW5zaWduZWQgbG9uZyBpO1xcbjI1OTc6XFx0XFx0dm9pZCAqZW50cnk7XFxuMjU5ODpcXHRcXHRib29sIG11dGF0ZWQgPSBmYWxzZTtcXG4yNTk5OlxcdFxcdGludCByID0gMDtcXG4yNjAwOlxcdFxcbjI2MDE6XFx0XFx0ZW50cnkgPSBhdHRyaWJ1dGVzID8geGFfbWtfdmFsdWUoYXR0cmlidXRlcykgOiBOVUxMO1xcbjI2MDI6XFx0XFxuMjYwMzpcXHRcXHR0cmFjZV9rdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzKHN0YXJ0LCBlbmQsIGF0dHJpYnV0ZXMpO1xcbjI2MDQ6XFx0XFxuMjYwNTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2xvY2spO1xcbjI2MDY6XFx0XFxuMjYwNzpcXHRcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSBlbnRpcmUgcmFuZ2UgaGFzIHRoZSBkZXNpcmVkIGF0dHJpYnV0ZXMuICovXFxuMjYwODpcXHRcXHRpZiAoa3ZtX3JhbmdlX2hhc19tZW1vcnlfYXR0cmlidXRlcyhrdm0sIHN0YXJ0LCBlbmQsIH4wLCBhdHRyaWJ1dGVzKSlcXG4yNjA5OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjEwOlxcdFxcbjI2MTE6XFx0XFx0LypcXG4yNjEyOlxcdFxcdCAqIEJvdW5kIHRoZSBudW1iZXIgb2YgbWF0ZXJpYWxpemVkIEdGTnMgcGVyIFZNLiAgU2VlIHRoZSBjb21tZW50IG9uXFxuMjYxMzpcXHRcXHQgKiBLVk1fTUVNX0FUVFJfTUFYX0dGTlMuXFxuMjYxNDpcXHRcXHQgKi9cXG4yNjE1OlxcdFxcdGlmIChhdHRyaWJ1dGVzIFxcdTAwMjZcXHUwMDI2XFxuMjYxNjpcXHRcXHQgICAga3ZtLVxcdTAwM2VtZW1fYXR0cl9nZm5fY291bnQgKyAoZW5kIC0gc3RhcnQpIFxcdTAwM2UgS1ZNX01FTV9BVFRSX01BWF9HRk5TKSB7XFxuMjYxNzpcXHRcXHRcXHRyID0gLUVOT1NQQztcXG4yNjE4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjE5OlxcdFxcdH1cXG4yNjIwOlxcdFxcbjI2MjE6XFx0XFx0LypcXG4yNjIyOlxcdFxcdCAqIEZyb20gdGhpcyBwb2ludCBvbiB0aGUgcmVxdWVzdCBtdXRhdGVzIHRoZSBhcnJheSwgc28gdGhlIHBlci1WTVxcbjI2MjM6XFx0XFx0ICogY291bnRlciBtdXN0IGJlIHJlc3luY2hyb25pemVkIG9uIHRoZSB3YXkgb3V0LiAgRWFybHktb3V0cyBhYm92ZVxcbjI2MjQ6XFx0XFx0ICogc2tpcCB0aGUgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgcmVjb3VudC5cXG4yNjI1OlxcdFxcdCAqL1xcbjI2MjY6XFx0XFx0bXV0YXRlZCA9IHRydWU7XFxuMjYyNzpcXHRcXG4yNjI4OlxcdFxcdC8qXFxuMjYyOTpcXHRcXHQgKiBSZXNlcnZlIG1lbW9yeSBhaGVhZCBvZiB0aW1lIHRvIGF2b2lkIGhhdmluZyB0byBkZWFsIHdpdGggZmFpbHVyZXNcXG4yNjMwOlxcdFxcdCAqIHBhcnR3YXkgdGhyb3VnaCBzZXR0aW5nIHRoZSBuZXcgYXR0cmlidXRlcy5cXG4yNjMxOlxcdFxcdCAqL1xcbjI2MzI6XFx0XFx0Zm9yIChpID0gc3RhcnQ7IGkgXFx1MDAzYyBlbmQ7IGkrKykge1xcbjI2MzM6XFx0XFx0XFx0ciA9IHhhX3Jlc2VydmUoXFx1MDAyNmt2bS1cXHUwMDNlbWVtX2F0dHJfYXJyYXksIGksIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuMjYzNDpcXHRcXHRcXHRpZiAocilcXG4yNjM1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4yNjM2OlxcdFxcbjI2Mzc6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjYzODpcXHRcXHR9XFxuMjYzOTpcXHRcXG4yNjQwOlxcdFxcdGt2bV9oYW5kbGVfZ2ZuX3JhbmdlKGt2bSwgXFx1MDAyNnByZV9zZXRfcmFuZ2UpO1xcbjI2NDE6XFx0XFxuMjY0MjpcXHRcXHRmb3IgKGkgPSBzdGFydDsgaSBcXHUwMDNjIGVuZDsgaSsrKSB7XFxuMjY0MzpcXHRcXHRcXHRyID0geGFfZXJyKHhhX3N0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBpLCBlbnRyeSxcXG4yNjQ0OlxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMX0FDQ09VTlQpKTtcXG4yNjQ1OlxcdFxcdFxcdEtWTV9CVUdfT04ociwga3ZtKTtcXG4yNjQ2OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjI2NDc6XFx0XFx0fVxcbjI2NDg6XFx0XFxuMjY0OTpcXHRcXHRrdm1faGFuZGxlX2dmbl9yYW5nZShrdm0sIFxcdTAwMjZwb3N0X3NldF9yYW5nZSk7XFxuMjY1MDpcXHRcXG4yNjUxOlxcdG91dF91bmxvY2s6XFxuMjY1MjpcXHRcXHQvKlxcbjI2NTM6XFx0XFx0ICogUmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBhY3R1YWwgc3RhdGUgb25seSB3aGVuIHRoZSBhcnJheSBtYXkgaGF2ZVxcbjI2NTQ6XFx0XFx0ICogY2hhbmdlZDogb24gRU5PTUVNIHBhcnR3YXkgdGhyb3VnaCB0aGUgcmVzZXJ2ZSBsb29wLCBwYXJ0aWFsbHlcXG4yNjU1OlxcdFxcdCAqIHJlc2VydmVkIEdGTnMgYXJlIHJldGFpbmVkIGFuZCBtdXN0IGJlIGNvdW50ZWQsIGFuZCBhIHN1Y2Nlc3NmdWxcXG4yNjU2OlxcdFxcdCAqIHNldCBvciBjbGVhciBjaGFuZ2VzIHRoZSBwb3B1bGF0aW9uLiAgTm9uLW11dGF0aW5nIGV4aXRzIHNraXAgdGhlXFxuMjY1NzpcXHRcXHQgKiB3YWxrIHNvIGlkZW1wb3RlbnQgcmVxdWVzdHMgc3RheSBPKDEpLlxcbjI2NTg6XFx0XFx0ICovXFxuMjY1OTpcXHRcXHRpZiAobXV0YXRlZClcXG4yNjYwOlxcdFxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0ga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXMoa3ZtKTtcXG4yNjYxOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VzbG90c19sb2NrKTtcXG4yNjYyOlxcdFxcbjI2NjM6XFx0XFx0cmV0dXJuIHI7XFxuMjY2NDpcXHR9XFxuMjY2NTpcXHRzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbWVtX2F0dHJpYnV0ZXMoc3RydWN0IGt2bSAqa3ZtLFxcbjI2NjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGt2bV9tZW1vcnlfYXR0cmlidXRlcyAqYXR0cnMpXFxuMjY2NzpcXHR7XFxuMjY2ODpcXHRcXHRnZm5fdCBzdGFydCwgZW5kO1xcbjI2Njk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjIzLjYwMDcxNjQ0N1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDIxMTg4NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTWVtb3J5IEF0dHJpYnV0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBwaWVjZSBieSBwaWVjZS4gRmlyc3QsIGl0IHNlZW1zIGxpa2Ugd2UndmUgYWRkZWQgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgR0ZOcyAoR3Vlc3QgRnJhbWUgTnVtYmVycykgdGhhdCBjYW4gaGF2ZSBtYXRlcmlhbGl6ZWQgZW50cmllcyBpbiB0aGUgYG1lbV9hdHRyX2FycmF5YCBwZXIgVk0uIFRoZSB2YWx1ZSBgS1ZNX01FTV9BVFRSX01BWF9HRk5TYCBpcyBzZXQgdG8gYDFVTCBcdTAwM2NcdTAwM2MgMjVgLCB3aGljaCB0cmFuc2xhdGVzIHRvLCB3aGF0LCAzMyw1NTQsNDMyIGVudHJpZXM/IFRoYXQgc2VlbXMgcmVhc29uYWJsZSBmb3IgYSBoYXJkZW5pbmcgbWVhc3VyZS5cblxuTmV4dCwgYSBuZXcgZmllbGQsIGBtZW1fYXR0cl9nZm5fY291bnRgIChhbiBgdW5zaWduZWQgbG9uZ2ApLCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgYHN0cnVjdCBrdm1gLiBJJ20gZ3Vlc3NpbmcgdGhpcyB3aWxsIHRyYWNrIHRoZSBudW1iZXIgb2YgYWN0aXZlIGVudHJpZXMuIFRoaXMgaXMgZ29vZDsgd2UgbmVlZCB0byB0cmFjayB0aGlzIHNvbWVob3cgaWYgd2Ugd2FudCB0byBlbmZvcmNlIHRoZSBsaW1pdC5cblxuVGhlIGBrdm1fY3JlYXRlX3ZtYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgdGhlIGBtZW1fYXR0cl9hcnJheWAgd2l0aCBgWEFfRkxBR1NfQUNDT1VOVGAgYW5kIGFsc28gc2V0cyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAgdG8gemVyby4gT2theSwgdXNpbmcgYFhBX0ZMQUdTX0FDQ09VTlRgIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgbm93IGJlaW5nIHVzZWQgdG8gdHJhY2sgaG93IG1hbnkgZW50cmllcyBleGlzdCBpbiB0aGUgYXJyYXkgKHByb2JhYmx5IGZvciB0aGUgcHVycG9zZSBvZiBhdm9pZGluZyBhbnkgc29ydCBvZiBvdXQtb2YtbWVtb3J5IGVycm9yKS4gVGhpcyBpbml0aWFsaXphdGlvbiBlbnN1cmVzIHdlIGhhdmUgYSBrbm93biBzdGFydGluZyBwb2ludC5cblxuVGhlIG5ldyBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgIGZ1bmN0aW9uIGxvb2tzIGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB4YXJyYXkgdXNpbmcgYHhhc19mb3JfZWFjaGAuIEl0IGxvb2tzIGxpa2UgaXQgaGFuZGxlcyByZXRyaWVzIHdpdGggYHhhc19wYXVzZWAgYW5kIGFwcHJvcHJpYXRlbHkgc2tpcHMgdGhvc2UgZW50cmllcy4gSXQgY291bnRzIHRoZSBudW1iZXIgb2Ygbm9uLU5VTEwgZW50cmllcyBhbmQgcGF1c2VzIGlmIG5lY2Vzc2FyeS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB3YXkgdG8gZ2V0IGFuIGFjY3VyYXRlIGNvdW50IG9mIHRoZSB1c2VkIGVudHJpZXMuXG5cbkZpbmFsbHksIGluIGBrdm1fdm1fc2V0X21lbV9hdHRyaWJ1dGVzYCwgd2Ugc2VlIHRoZSBlbmZvcmNlbWVudCBvZiB0aGUgbGltaXQuIFRoZSBwYXRjaCBjaGVja3MgaWYgdGhlIGFkZGl0aW9uIG9mIG5ldyBtZW1vcnkgYXR0cmlidXRlcyB3b3VsZCBleGNlZWQgdGhlIGBLVk1fTUVNX0FUVFJfTUFYX0dGTlNgIGxpbWl0LiBJZiBzbywgaXQgcmV0dXJucyBgLUVOT1NQQ2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUuIEFsc28sIGlmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlIGFycmF5IGl0IHJlY2FsY3VsYXRlcyB0aGUgY291bnQgdXNpbmcgYGt2bV9jb3VudF9tZW1fYXR0cl9lbnRyaWVzYC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBwYXRjaCBzZW5kIGFueSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2U/IE5vLCB0aGF0J3MgZ29vZC5cblxuSXMgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgdXNlZCBpbiBjb25kaXRpb25hbCBicmFuY2hlcz8gV2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHRoaXMuIExldCdzIHNlZTogYGt2bS1cdTAwM2VtZW1fYXR0cl9nZm5fY291bnRgIGlzIGluaXRpYWxpemVkIHRvIDAgaW4gYGt2bV9jcmVhdGVfdm1gLiBHcmVhdC4gVGhlIGBrdm1gIHN0cnVjdCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgLiBUaGF0J3MgaW1wb3J0YW50LiBUaGlzIG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBmaWVsZHMgaW4gdGhlIHN0cnVjdCBhcmUgemVyby1pbml0aWFsaXplZC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGhvdyBga3ZtYCBpcyBhbGxvY2F0ZWQgaW4gYGt2bV9jcmVhdGVfdm1gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSdyZSBzYWZlIGhlcmUuXG5cbkkgYmVsaWV2ZSB0aGlzIHBhdGNoIGlzIHdlbGwtd3JpdHRlbiBhbmQgc2FmZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjAyMTkwNzcxN1oiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MTkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NyZWF0ZV92bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9OTkwPXN0YXRpYyB2b2lkIGt2bV9kZXN0cm95X3ZtX2RlYnVnZnMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMDA3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTAwODpzdGF0aWMgaW50IGt2bV9jcmVhdGVfdm1fZGVidWdmcyhzdHJ1Y3Qga3ZtICprdm0sIGNvbnN0IGNoYXIgKmZkbmFtZSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEwMDkte1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xMTA3PXN0YXRpYyB2b2lkIGt2bV9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uKHZvaWQpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTEwOC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjExMDk6c3RhdGljIHN0cnVjdCBrdm0gKmt2bV9jcmVhdGVfdm0odW5zaWduZWQgbG9uZyB0eXBlLCBjb25zdCBjaGFyICpmZG5hbWUpXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTEwLXtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTE0My1cXHQgKiBGb3JjZSBzdWJzZXF1ZW50IGRlYnVnZnMgZmlsZSBjcmVhdGlvbnMgdG8gZmFpbCBpZiB0aGUgVk0gZGlyZWN0b3J5XFxudmlydC9rdm0va3ZtX21haW4uYzoxMTQ0OlxcdCAqIGlzIG5vdCBjcmVhdGVkIChieSBrdm1fY3JlYXRlX3ZtX2RlYnVnZnMoKSkuXFxudmlydC9rdm0va3ZtX21haW4uYy0xMTQ1LVxcdCAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xMjA3LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTIwODpcXHRyID0ga3ZtX2NyZWF0ZV92bV9kZWJ1Z2ZzKGt2bSwgZmRuYW1lKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTEyMDktXFx0aWYgKHIpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTU1NjQ9c3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2NyZWF0ZV92bSh1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzYtXFxudmlydC9rdm0va3ZtX21haW4uYzo1NTc3OlxcdGt2bSA9IGt2bV9jcmVhdGVfdm0odHlwZSwgZmRuYW1lKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTU1NzgtXFx0aWYgKElTX0VSUihrdm0pKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjI5LjA3MzgzNTYyNloiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzIwMTcyMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktWTSBWTSBDcmVhdGlvbiBBbGxvY2F0aW9uIEluc3BlY3Rpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gaG9uZSBpbiBvbiB0aGUgYGt2bV9jcmVhdGVfdm1gIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCBtZW1vcnkgYWxsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGlzIGNvcmUgc3RhZ2Ugb2YgVk0gaW5pdGlhbGl6YXRpb24uIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBob3cgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG9idmlvdXMgcmVkIGZsYWdz4oCUbWVtb3J5IGxlYWtzLCBpbmVmZmljaWVudCBhbGxvY2F0aW9uIHBhdHRlcm5zLCBvciBwb3RlbnRpYWxseSBleGNlc3NpdmUgcmVzb3VyY2UgY29uc3VtcHRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIGluc3RhYmlsaXR5IGRvd24gdGhlIGxpbmUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGFjdHVhbCBjYWxsIGl0c2VsZiwgb2YgY291cnNlLCBidXQgYWxzbyBhbnkgc3VwcG9ydGluZyBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgYW55IHN1YnNlcXVlbnQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjMxLjM5NDAxMTYwNloiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdHtcXG4xMTExOlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGt2bV9hcmNoX2FsbG9jX3ZtKCk7XFxuMTExMjpcXHRcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cztcXG4xMTEzOlxcdFxcdGludCByLCBpLCBqO1xcbjExMTQ6XFx0XFxuMTExNTpcXHRcXHRpZiAoIWt2bSlcXG4xMTE2OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRLVk1fTU1VX0xPQ0tfSU5JVChrdm0pO1xcbjExMTk6XFx0XFx0bW1ncmFiKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG4xMTIwOlxcdFxcdGt2bS1cXHUwMDNlbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4xMTIxOlxcdFxcdGt2bV9ldmVudGZkX2luaXQoa3ZtKTtcXG4xMTIyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlbG9jayk7XFxuMTEyMzpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZWlycV9sb2NrKTtcXG4xMTI0OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmt2bS1cXHUwMDNlc2xvdHNfbG9jayk7XFxuMTEyNTpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZXNsb3RzX2FyY2hfbG9jayk7XFxuMTEyNjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2a3ZtLVxcdTAwM2Vtbl9pbnZhbGlkYXRlX2xvY2spO1xcbjExMjc6XFx0XFx0cmN1d2FpdF9pbml0KFxcdTAwMjZrdm0tXFx1MDAzZW1uX21lbXNsb3RzX3VwZGF0ZV9yY3V3YWl0KTtcXG4xMTI4OlxcdFxcdHhhX2luaXQoXFx1MDAyNmt2bS1cXHUwMDNldmNwdV9hcnJheSk7XFxuMTEyOTpcXHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuMTEzMDpcXHRcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZrdm0tXFx1MDAzZW1lbV9hdHRyX2FycmF5LCBYQV9GTEFHU19BQ0NPVU5UKTtcXG4xMTMxOlxcdFxcdGt2bS1cXHUwMDNlbWVtX2F0dHJfZ2ZuX2NvdW50ID0gMDtcXG4xMTMyOlxcdCNlbmRpZlxcbjExMzM6XFx0XFxuMTEzNDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2a3ZtLVxcdTAwM2VncGNfbGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDE5OjA0OjMxLjM5NDM3NDU3NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjcwMDk1MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1lbW9yeSBBdHRyaWJ1dGUgTGltaXQgZm9yIEtWTSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIHdvdWxkIGJlIGdvb2QgYXQgZmluZGluZy5cblxuYGt2bV9hcmNoX2FsbG9jX3ZtKClgIGNsZWFybHkgemVyb2VzIHRoZSBgc3RydWN0IGt2bWAsIGFuZCBzcGVjaWZpY2FsbHkgbGluZSAxMTMxIHplcm9lcyBga3ZtLVx1MDAzZW1lbV9hdHRyX2dmbl9jb3VudGAuIEV4Y2VsbGVudCwgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTG9va2luZyBhdCBga3ZtX2NvdW50X21lbV9hdHRyX2VudHJpZXNgLCB0aGUgYFhBX1NUQVRFYCBtYWNybyBpbml0aWFsaXplcyB0aGUgYHhhc2Agc3RydWN0dXJlLCBhbmQgYGNvdW50YCBpcyBzZXQgdG8gMC4gU2ltaWxhcmx5LCBgbXV0YXRlZGAgaW4gYGt2bV92bV9zZXRfbWVtX2F0dHJpYnV0ZXNgIGlzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBTbywgYmFzZWQgb24gdGhlIGNvZGUgaXRzZWxmLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uIE5vIGRhdGEgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBhbmQgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBvZiBpbmZvIGxlYWtzLlxuXG5UaGUgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBhIHJlc291cmNlIGxpbWl0IGFuZCBoYXJkZW5pbmcgbWVhc3VyZSwgZGVzaWduZWQgdG8gc3RvcCB0aGUgdW5ib3VuZGVkIGdyb3d0aCBvZiB4YXJyYXkgbm9kZSBhbGxvY2F0aW9ucyB3aGVuIGEgdXNlciBjYWxscyBgS1ZNX1NFVF9NRU1PUllfQVRUUklCVVRFU2AuIEFueSBidWdzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGxvZ2ljLWJhc2VkLCByZXNvdXJjZS1tYW5hZ2VtZW50IGlzc3VlcywgcG90ZW50aWFsIGRlYWRsb2NrcyBvciBjb25jdXJyZW5jeSBwcm9ibGVtcyAod2hpY2ggYGxvY2tkZXBgIHNob3VsZCBjYXRjaCksIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBtZW1vcnkgY29ycnVwdGlvbiAod2hpY2ggYEtBU0FOYCBpcyBkZXNpZ25lZCB0byBkZXRlY3QpLiBDcnVjaWFsbHksIG5vbmUgb2YgdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgaW52b2x2ZSB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHRlc3Rpbmcgc2hvdWxkIGJlIGFkZXF1YXRlIHRvIGNhdGNoIGFueSBpc3N1ZXMuXG5cbkxldCdzIGRvdWJsZS1jaGVjazogS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuIEtBU0FOIGlzIHRoZXJlIHRvIGhhbmRsZSBPT0IsIFVBRiwgZG91YmxlLWZyZWVzLCBldGMuIFRoaXMgcGF0Y2ggYWRkcyBhbiBlbnRyeSBjb3VudGVyIGFuZCBhIGxpbWl0IGNoZWNrIGZvciB0aGUgS1ZNIG1lbW9yeSBhdHRyaWJ1dGVzIHhhcnJheSAoYEtWTV9NRU1fQVRUUl9NQVhfR0ZOU2ApLiBUaGUgYG1lbV9hdHRyX2dmbl9jb3VudGAgY291bnRlciBpcyBpbnRyb2R1Y2VkLCBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGUgaGVscGVyIGZ1bmN0aW9uIGBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcygpYCB3YWxrcyB0aGUgeGFycmF5IGFuZCBjb3VudHMgdGhlIGVudHJpZXMuIEFsbCB0aGUgdmFyaWFibGVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgbm8gdXNlci1jb3B5aW5nLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMuIFllcCwgZXZlcnl0aGluZyBsb29rcyBnb29kLlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4NiwiT3V0cHV0VG9rZW5zIjoyMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQxOTowNDozOC42NjQ0NzI2MjlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSByZXNvdXJjZSBsaW1pdCAoS1ZNX01FTV9BVFRSX01BWF9HRk5TKSBhbmQgdHJhY2tpbmcgKG1lbV9hdHRyX2dmbl9jb3VudCkgZm9yIG1hdGVyaWFsaXplZCBlbnRyaWVzIGluIEtWTSdzIG1lbV9hdHRyX2FycmF5IHhhcnJheSB0byBwcmV2ZW50IHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24gZnJvbSBLVk1fU0VUX01FTU9SWV9BVFRSSUJVVEVTIGlvY3RsIGNhbGxzLlxcblxcbkFsbCBhZGRlZCBhbmQgbW9kaWZpZWQgdmFyaWFibGVzIChpbmNsdWRpbmcgdGhlIGNvdW50ZXIgaW4gc3RydWN0IGt2bSwgbG9jYWwgc3RhdGUgaW4ga3ZtX3ZtX3NldF9tZW1fYXR0cmlidXRlcywgYW5kIHRoZSBpdGVyYXRvciBpbiBrdm1fY291bnRfbWVtX2F0dHJfZW50cmllcykgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG1lbW9yeSBidWZmZXJzIGFyZSBleHBvc2VkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbiB0aGlzIHBhdGNoIHdvdWxkIHBlcnRhaW4gdG8gYWNjb3VudGluZyBsb2dpYywgcmVzb3VyY2UgZXhoYXVzdGlvbiwgb3IgbG9ja2luZy9jb25jdXJyZW5jeSAoaGFuZGxlZCBieSBzdGFuZGFyZCB0ZXN0cyBhbmQgTE9DS0RFUCksIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[1] Phase: Succeeded StartedAt: 2026-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 19:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 19:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2] Phase: Succeeded StartedAt: 2026-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 19:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:04:50 +0000 UTC FinishedAt: 2026-09-11 19:04:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2566486651/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 19:05:00 +0000 UTC FinishedAt: 2026-09-11 19:21:09 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:05:00 +0000 UTC FinishedAt: 2026-09-11 19:21:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*060cdc24-3bd1-4bad-b278-d40907bae9fe,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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2566486651/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": "2e5e60b6-c576-45fd-994d-4e1d5c0ee962", "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-workfloww6bfc/series-workfloww6bfc-build-action-2902206905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:05:00 +0000 UTC FinishedAt: 2026-09-11 19:20:59 +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:*060cdc24-3bd1-4bad-b278-d40907bae9fe,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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2566486651/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": "2e5e60b6-c576-45fd-994d-4e1d5c0ee962", "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-workfloww6bfc/series-workfloww6bfc-build-action-2902206905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 19:21:09 +0000 UTC FinishedAt: 2026-09-11 19:21:09 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:21:09 +0000 UTC FinishedAt: 2026-09-11 19:21:09 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 19:21:09 +0000 UTC FinishedAt: 2026-09-11 19:21:19 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:21:09 +0000 UTC FinishedAt: 2026-09-11 19:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2522580434/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 19:21:19 +0000 UTC FinishedAt: 2026-09-11 19:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:21:19 +0000 UTC FinishedAt: 2026-09-11 19:23:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e5e60b6-c576-45fd-994d-4e1d5c0ee962,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-workfloww6bfc/series-workfloww6bfc-build-action-2902206905/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-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 19:23:17 +0000 UTC FinishedAt: 2026-09-11 19:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:23:17 +0000 UTC FinishedAt: 2026-09-11 19:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 19:23:17 +0000 UTC FinishedAt: 2026-09-11 19:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:23:17 +0000 UTC FinishedAt: 2026-09-11 19:39:42 +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:*060cdc24-3bd1-4bad-b278-d40907bae9fe,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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2522580434/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": "a54b5b46-809d-4f22-a473-c317ec575648", "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-workfloww6bfc/series-workfloww6bfc-build-action-3669623910/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:23:17 +0000 UTC FinishedAt: 2026-09-11 19:39:32 +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:*060cdc24-3bd1-4bad-b278-d40907bae9fe,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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2522580434/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": "a54b5b46-809d-4f22-a473-c317ec575648", "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-workfloww6bfc/series-workfloww6bfc-build-action-3669623910/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 19:39:42 +0000 UTC FinishedAt: 2026-09-11 19:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:39:42 +0000 UTC FinishedAt: 2026-09-11 19:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 19:39:42 +0000 UTC FinishedAt: 2026-09-11 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:39:42 +0000 UTC FinishedAt: 2026-09-11 19:41:20 +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:*a54b5b46-809d-4f22-a473-c317ec575648,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-workfloww6bfc/series-workfloww6bfc-build-action-3669623910/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-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"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:*2e5e60b6-c576-45fd-994d-4e1d5c0ee962,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a54b5b46-809d-4f22-a473-c317ec575648,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-workfloww6bfc/series-workfloww6bfc-build-action-2902206905/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-workfloww6bfc/series-workfloww6bfc-build-action-3669623910/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 19:41:41 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 19:41:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2930643751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:31 +0000 UTC FinishedAt: 2026-09-11 19:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:41 +0000 UTC FinishedAt: 2026-09-11 22:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww6bfc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"base_commit":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","base_tree":"kvm-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_count_mem_attr_entries","kvm_vm_set_mem_attributes","kvm_vm_ioctl_set_mem_attributes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD","KVM_SW_PROTECTED_VM","KVM_GENERIC_MEMORY_ATTRIBUTES","EXPERT"],"series_id":"734bda86-476d-49cf-9a5e-335cc5b006c0","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-09-11 19:41:41 +0000 UTC FinishedAt: 2026-09-11 22:46:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e5e60b6-c576-45fd-994d-4e1d5c0ee962,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a54b5b46-809d-4f22-a473-c317ec575648,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-workfloww6bfc/series-workfloww6bfc-build-action-2902206905/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-workfloww6bfc/series-workfloww6bfc-build-action-3669623910/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-workfloww6bfc/series-workfloww6bfc-convert-artifact-2930643751/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,}