Name: series-workflowrx4fs Phase: Succeeded StartedAt: 2026-09-08 17:02:54 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[0] Phase: Succeeded StartedAt: 2026-09-08 17:02:54 +0000 UTC FinishedAt: 2026-09-08 17:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 17:02:54 +0000 UTC FinishedAt: 2026-09-08 17:06:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "7dbd9c69-5f3a-4a32-9932-19953413f8d6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_skip_charged_region", "damon_do_apply_schemes", "damos_apply_target", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9kb19hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZjQ2ZGVkZTlhODZjMjQ0MWJjNjZmNDUwYzY5YzgyMmJhMDk2NzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjg5ZDFjNzc0MTc0NTAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI0NTIsMzYgJiM0MzsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbiYjNDM7XHRib29sIHNraXAgPSBmYWxzZTtcbiBcbiBcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbiBcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4mIzQzO1x0XHRcdHNraXAgPSB0cnVlO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG4gXHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4gXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXG4gXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIFx0XHRcdGlmICghc3pfdG9fc2tpcCkge1xuLVx0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opXG4tXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4mIzQzO1x0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHNraXAgPSB0cnVlO1xuIFx0XHR9XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHNraXA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24mIzM0OywKICAgICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV90YXJnZXQmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjA1OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjg5ZDFjNzc0MTc0NTAgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI0NTIsMzYgJiM0MzsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIHsKIAlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKIAl1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7CiYjNDM7CWJvb2wgc2tpcCA9IGZhbHNlOwogCiAJLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwogCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7CiAJCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KIAkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc2tpcCA9IHRydWU7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiAKIAkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsgci0mZ3Q7YXIuc3RhcnQgJmx0OwogCQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tKSB7CiAJCQlzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAtCiAJCQkJCXItJmd0O2FyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTsKIAkJCWlmICghc3pfdG9fc2tpcCkgewotCQkJCWlmIChkYW1vbl9zel9yZWdpb24ocikgJmx0Oz0gbWluX3JlZ2lvbl9zeikKLQkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCWlmIChkYW1vbl9zel9yZWdpb24ocikgJmx0Oz0gbWluX3JlZ2lvbl9zeikgewomIzQzOwkJCQkJc2tpcCA9IHRydWU7CiYjNDM7CQkJCQlnb3RvIG91dDsKJiM0MzsJCQkJfQogCQkJCXN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6OwogCQkJfQogCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApOwotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJc2tpcCA9IHRydWU7CiAJCX0KJiM0MzsJfQomIzQzO291dDoKJiM0MzsJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKIAkJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiAJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKIAl9Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gc2tpcDsKIH0KIAogc3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc3CgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gUGF0Y2gqKgoKQWxyaWdodCwgdGhlIHBhdGNoIGlzIHR1Y2tlZCBhd2F5IGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaW1lIHRvIGdldCB0aGUgbWFnbmlmeWluZyBnbGFzcyBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHNjYW4gd2lsbCBiZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgbm90IGp1c3QgYWJvdXQgdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucyAtIGFyZSBhbnkgbmV3IGZlYXR1cmVzIGV4cG9zZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzZXR0aW5ncy4KClRoZW4gaXQmIzM5O3Mgb250byB0aGUgY2FsbGVycy4gV2hvJiMzOTtzIHVzaW5nIHRoaXMgY29kZT8gV2hhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyBvZiBleGVjdXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gVGltZSB0byB3aGlwIG91dCBteSBncmVwcGVyIGFuZCByZWFkLWZpbGUgdG9vbHMuIEkgd2FudCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zLCBmdW5jdGlvbiBjYWxscywgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGluZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBib3RoIHRoZSBpbW1lZGlhdGUgY2hhbmdlcyBhbmQgYW55IHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gVGhpcyBpbml0aWFsIHBoYXNlIG9mIGludmVzdGlnYXRpb24gd2lsbCBmb3JtIHRoZSBmb3VuZGF0aW9uIGZvciBhIG11Y2ggZGVlcGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NDA6XHQgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxuMjQ0MTpcdCAqIGFyZWEgdGhhdCBub3QgY2hhcmdlZCBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpZG5vdywgYW5kIHJldHVybiB0cnVlLiAgVGhlXG4yNDQyOlx0ICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cbjI0NDM6XHQgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxuMjQ0NDpcdCAqIG9mIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkuICBJZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpIGlzIHVzZWQsXG4yNDQ1Olx0ICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXG4yNDQ2Olx0ICpcbjI0NDc6XHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuMjQ0ODpcdCAqL1xuMjQ0OTpcdHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuMjQ1MTpcdFx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4yNDUyOlx0e1xuMjQ1MzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNDU0Olx0XHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XG4yNDU1Olx0XHRib29sIHNraXAgPSBmYWxzZTtcbjI0NTY6XHRcbjI0NTc6XHRcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbjI0NTg6XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbjI0NTk6XHRcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuMjQ2MDpcdFx0XHRcdHJldHVybiB0cnVlO1xuMjQ2MTpcdFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbjI0NjI6XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuMjQ2MzpcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ2NDpcdFx0XHRcdGdvdG8gb3V0O1xuMjQ2NTpcdFx0XHR9XG4yNDY2Olx0XG4yNDY3Olx0XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuMjQ2ODpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuMjQ2OTpcdFx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuMjQ3MDpcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbjI0NzE6XHRcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbjI0NzI6XHRcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4yNDczOlx0XHRcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ3NDpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI0NzU6XHRcdFx0XHRcdH1cbjI0NzY6XHRcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuMjQ3NzpcdFx0XHRcdH1cbjI0Nzg6XHRcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4yNDc5Olx0XHRcdFx0c2tpcCA9IHRydWU7XG4yNDgwOlx0XHRcdH1cbjI0ODE6XHRcdH1cbjI0ODI6XHRvdXQ6XG4yNDgzOlx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuMjQ4NDpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuMjQ4NTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjI0ODY6XHRcdH1cbjI0ODc6XHRcdHJldHVybiBza2lwO1xuMjQ4ODpcdH1cbjI0ODk6XHRcbjI0OTA6XHRzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXG4yNDkxOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfdHJpZWQsIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCxcbjI0OTI6XHRcdFx0dW5zaWduZWQgbG9uZyBzel9vcHNfZmlsdGVyX3Bhc3NlZClcbjI0OTM6XHR7XG4yNDk0Olx0XHRzLVx1MDAzZXN0YXQubnJfdHJpZWQmIzQzOyYjNDM7O1xuMjQ5NTpcdFx0cy1cdTAwM2VzdGF0LnN6X3RyaWVkICYjNDM7PSBzel90cmllZDtcbjI0OTY6XHRcdGlmIChzel9hcHBsaWVkKVxuMjQ5NzpcdFx0XHRzLVx1MDAzZXN0YXQubnJfYXBwbGllZCYjNDM7JiM0Mzs7XG4yNDk4Olx0XHRzLVx1MDAzZXN0YXQuc3pfYXBwbGllZCAmIzQzOz0gc3pfYXBwbGllZDtcbjI0OTk6XHRcdHMtXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XG4yNTAwOlx0fVxuMjUwMTpcdFxuMjUwMjpcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTAzOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbjI1MDQ6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjUwNTpcdHtcbjI1MDY6XHRcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuMjUwNzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4yNTA4Olx0XHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4yNTA5Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWc6NjpcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTctXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZzoxNjpcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTE4LVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxOTpcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxubW0vZGFtb24vS2NvbmZpZzoyMDpcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG5tbS9kYW1vbi9LY29uZmlnLTIxLVx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTMwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzozMTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTQxLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjQyOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00My1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDUtXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo1MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjUzOlx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTU0LVx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnOjU3Olx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctNjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjYxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy02Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6Njk6XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjcxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy03Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NzM6XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxubW0vZGFtb24vS2NvbmZpZy03NC1cdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Nzg6XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTc5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctODAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjgxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnOjg5Olx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjkyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbm1tL2RhbW9uL0tjb25maWc6OTM6XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbm1tL2RhbW9uL0tjb25maWctOTQtXHQgIHRob3NlLlxuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWc6MTAxOlx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTAzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xubW0vZGFtb24vS2NvbmZpZy0xMDUtXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTEwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxubW0vZGFtb24vS2NvbmZpZzoxMTM6XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG5tbS9kYW1vbi9LY29uZmlnLTExNC1cdCAgbWV0cmljcy5cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTg6XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTE5Olx0ZGVmYXVsdCBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTIxOlx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxubW0vZGFtb24vS2NvbmZpZy0xMjItXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIHRoaW5raW5nIGxpa2UgYSBkZXZlbG9wZXIgaW52ZXN0aWdhdGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgQ2FsbHMqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIFRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLiBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQmIzM5O3MgYmVpbmcgaW52b2tlZCDigJMgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UgYXJlIHVzaW5nIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb2xlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBwbGF5cy4gSXMgaXQgcGFydCBvZiBhIGNyaXRpY2FsIHBhdGgsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgYW5kIGhvdyBpdCBzaG91bGQgYmVoYXZlLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVzZWQgaW5jb3JyZWN0bHkuIEkgbmVlZCB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFuZCByZXZpZXcgdGhlIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyNC0vKlxubW0vZGFtb24vY29yZS5jOjI0MjU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG5tbS9kYW1vbi9jb3JlLmMtMjQyNi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDQ5OnN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNDUwLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzc0LVxubW0vZGFtb24vY29yZS5jOjI3NzU6XHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc3Ni1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AqKgoKT2theSwgdGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLiBJJiMzOTttIGdvaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGhvdyBEQU1PTiBhY3R1YWxseSAqYXBwbGllcyogaXRzIHNjaGVtZXMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24sIHRoZSBwb2ludCB3aGVyZSBtb25pdG9yaW5nIGRhdGEgdHJhbnNsYXRlcyBpbnRvIHByYWN0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhZGp1c3RtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB0b3VjaGVzLCBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbW9uaXRvcmluZyBhbmQgYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkIGFuZCBob3cgaXQgYWN0dWFsbHkgYXBwbGllcyB0aGUgcmVzdWx0cyBvZiB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzU1Olx0XG4yNzU2Olx0c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMjc1NzpcdFx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI3NTg6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4yNzU5Olx0e1xuMjc2MDpcdFx0c3RydWN0IGRhbW9zICpzO1xuMjc2MTpcdFxuMjc2MjpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjI3NjM6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNzY0Olx0XG4yNzY1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjI3NjY6XHRcdFx0XHRjb250aW51ZTtcbjI3Njc6XHRcbjI3Njg6XHRcdFx0aWYgKCFzLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4yNzY5Olx0XHRcdFx0Y29udGludWU7XG4yNzcwOlx0XG4yNzcxOlx0XHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xuMjc3MjpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjI3NzM6XHRcdFx0XHRjb250aW51ZTtcbjI3NzQ6XHRcbjI3NzU6XHRcdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjI3NzY6XHRcdFx0XHRjb250aW51ZTtcbjI3Nzc6XHRcbjI3Nzg6XHRcdFx0aWYgKHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwMjZcdTAwMjZcbjI3Nzk6XHRcdFx0XHRcdHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwM2M9IHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXG4yNzgwOlx0XHRcdFx0Y29udGludWU7XG4yNzgxOlx0XG4yNzgyOlx0XHRcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXG4yNzgzOlx0XHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuMjc4NDpcdFxuMjc4NTpcdFx0XHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXG4yNzg2Olx0XHRcdFx0cy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cyYjNDM7JiM0Mzs7XG4yNzg3Olx0XHR9XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdC8qXG4yNzkxOlx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxuMjc5MjpcdCAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4yNzkzOlx0ICogQHQ6XHRcdFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXG4yNzk0Olx0ICogQG1heF9yZWdpb25fc3o6XHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cbjI3OTU6XHQgKlxuMjc5NjpcdCAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxuMjc5NzpcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXG4yNzk4Olx0ICogZnVuY3Rpb24gd2lsbCBhbHNvIG1lcmdlIHJlZ2lvbnMgYWZ0ZXIgdGhlIHNjaGVtZXMgYXBwbHlpbmcgYXR0ZW1wdCBpcyBkb25lLFxuMjc5OTpcdCAqIGZvciBlYWNoIHJlZ2lvbi4gIFRoZSBtZXJnZSBvcGVyYXRpb24gaXMgbWFkZSBvbmx5IHdoZW4gaXQgZG9lc24mIzM5O3QgbG9zZSB0aGVcbjI4MDA6XHQgKiBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIEBtYXhfcmVnaW9uX3N6LlxuMjgwMTpcdCAqXG4yODAyOlx0ICogSGVuY2UsIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lvbnMgY291bGRcbjI4MDM6XHQgKiBiZSBpbmNyZWFzZWQgb3IgcmVkdWNlZC4gIFRoZSBpbmNyZWFzZSBjb3VsZCBtYWtlIG1heF9ucl9yZWdpb25zIHRlbXBvcmFyaWx5XG4yODA0Olx0ICogYmUgdmlvbGF0ZWQsIHVudGlsIHRoZSBuZXh0IHBlci1hZ2dyZWdhdGlvbiBpbnRlcnZhbCByZWdpb25zIG1lcmdlIG9wZXJhdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0byBgbW0vZGFtb24vY29yZS5jYC4gTG9va2luZyBhdCB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLCB0aGUgY29yZSBsb2dpYyBzZWVtcyByZWxhdGVkIHRvIHF1b3RhIGVuZm9yY2VtZW50IHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCByZXR1cm4gd2l0aGluIHRoZSBgaWYgKHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pYCBibG9jaywgc3BlY2lmaWNhbGx5IHdoZW4gZW5jb3VudGVyaW5nIHRoZSBsYXN0IHJlZ2lvbiAoYHIgPT0gZGFtb25fbGFzdF9yZWdpb24odClgKS4gSXQgaW1tZWRpYXRlbHkgcmV0dXJuZWQgYHRydWVgIChza2lwcGluZyB0aGUgcmVnaW9uKSB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBgcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb21gIHZhbHVlLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG92ZXJzaWdodC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHNraXBgIHZhcmlhYmxlIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHJlZ2lvbiAqc2hvdWxkKiBiZSBza2lwcGVkLCBhbmQgdGhlbiB0aGUgbG9naWMgdG8gY2xlYXIgb3V0IHRoZSBgcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbWAgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBpZiBpdCYjMzk7cyB0aGUgbGFzdCByZWdpb24uIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCBhbmQgbWFrZXMgdGhlIGxvZ2ljIGNsZWFyZXIuCgpOb3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBEQU1PTiBpcyBjZXJ0YWlubHkgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBJdCYjMzk7cyBhIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgYW5kIGhhcyBzZXZlcmFsIHVzZXItYWNjZXNzaWJsZSBpbnRlcmZhY2VzLCBuYW1lbHkgc3lzZnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUEFERFJgIGFyZSBlbmFibGVkLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcHBlbnMgdmlhIHN5c2ZzIG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgUUVNVSBvciBzaW1pbGFyIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBga2RhbW9uZGAga2VybmVsIHRocmVhZCBleGVjdXRpbmcgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbiBhcyBwYXJ0IG9mIERBTU9TIHF1b3RhIGVuZm9yY2VtZW50IGlzIHRoZSB0YXJnZXQuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIERBTU9OIHN5c2ZzIGFuZCBvdGhlciByZWxldmFudCBjb25maWdzIHRvIHZlcmlmeSB0aGVzZSBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBEQU1PTiYjMzk7cyBDb3JlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gVGhlIE1ha2VmaWxlIGlzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzLCBzbyBJJiMzOTtsbCBjaGVjayBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGhvdyBgY29yZS5jYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgdGhlIHdheSBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IG5vdGhpbmcgdW5leHBlY3RlZCBpcyBnb2luZyBvbi4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBmbGFncywgb3B0aW1pemF0aW9uIGxldmVscyB0aGF0IG1pZ2h0IGFmZmVjdCBwcm9maWxpbmcsIG9yIGluY2x1ZGUgcGF0aHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJlaGF2aW9yYWwgY2hhbmdlcyB0aGF0IEkgd291bGRuJiMzOTt0IHJlYWRpbHkgZXhwZWN0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIHJlY2lwZSBmb3IgYnVpbGRpbmcgdGhpcyBjcnVjaWFsIHBpZWNlIG9mIHRoZSBtb25pdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKk1ha2VmaWxlIEludmVzdGlnYXRpb246IERBTU9OIE1vZHVsZSBJbmNsdXNpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9NYWtlZmlsZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdmVyaWZ5IGlzIHdoZXRoZXIgaXQmIzM5O3MgZ290IHRoZSBzdGFuZGFyZCBob29rIGZvciBjb25kaXRpb25hbGx5IGluY2x1ZGluZyB0aGUgREFNT04gbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGxpbmUgYG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL2AuIFRoaXMgaXMgdGhlIHR5cGljYWwgd2F5IHdlIG1hbmFnZSB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYmFzZWQgb24gdGhlIGBDT05GSUdfREFNT05gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGZpbGUgZm9yIHRoYXQgbGluZS4gSWYgaXQmIzM5O3MgdGhlcmUsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgcHJvcGVybHkgaGFuZGxlIHRoZSBpbmNsdXNpb24uIElmIG5vdCwgSSYjMzk7dmUgZ290IHRvIGZpZ3VyZSBvdXQgd2h5LCBhbmQgaWYgSSBuZWVkIHRvIG1ha2Ugc29tZSBtYW51YWwgYWRqdXN0bWVudHMgb3IgaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgc2V0dXAgZm9yIERBTU9OLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzNj1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzc6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBDYWxsIFBhdGhzKioKCk9rYXksIHNvIGlmIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RBTU9OPXlgLCB0aGF0IG1lYW5zIGBtbS9kYW1vbi9jb3JlLm9gIGlzIGJlaW5nIGJ1aWx0LiBBbmQsIGFzIGV4cGVjdGVkLCB0byBhY3R1YWxseSAqdXNlKiBEQU1PTiBmcm9tIHVzZXJzcGFjZSwgSSBuZWVkIGBDT05GSUdfREFNT05fU1lTRlM9eWAg4oCTIGFuZCwgb2YgY291cnNlLCBlaXRoZXIgYENPTkZJR19EQU1PTl9QQUREUj15YCBvciBgQ09ORklHX0RBTU9OX1ZBRERSPXlgLCBkZXBlbmRpbmcgb24gdGhlIGFkZHJlc3Mgc3BhY2UgSSYjMzk7bSB3b3JraW5nIHdpdGguCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgd2FudCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uIExldCBtZSB0cmFjZSB0aGUgY2FsbGVyIGhpZXJhcmNoeS4uLiBhaCwgcmlnaHQ6IGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBpcyBjYWxsZWQgYnkgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgZGFtb3NfYXBwbHlfdGFyZ2V0YCAob3IgcG9zc2libHkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIG5lZWQgdG8gY29uZmlybSB0aGF0KS4gT2theSwgdGltZSB0byBzZWFyY2ggdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBmb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIHRvIG5haWwgZG93biB0aGF0IGxhc3QgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY4NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc1NS1cbm1tL2RhbW9uL2NvcmUuYzoyNzU2OnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjgwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgxNS1cbm1tL2RhbW9uL2NvcmUuYzoyODE2Olx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI4MTctXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBkYW1vc19hcHBseV90YXJnZXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkYW1vc19hcHBseV90YXJnZXRgLiBMZXQmIzM5O3Mgc2VlLi4uIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgYGRhbW9zX2FwcGx5X3RhcmdldGAgaXMgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbG93IG9mIGRhdGEsIGFuZCBwaW5wb2ludCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBJREUgb3IgY29kZSBzZWFyY2ggdG9vbHMgY2FuIHR1cm4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3OTAtLypcbm1tL2RhbW9uL2NvcmUuYzoyNzkxOiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbm1tL2RhbW9uL2NvcmUuYy0yNzkyLSAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MDctICovXG5tbS9kYW1vbi9jb3JlLmM6MjgwODpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yODA5LVx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzA9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzOTYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM5NzpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTMzOTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGxpdmVzIC0gYWggeWVzLCBgbW0vZGFtb24vY29yZS5jYC4gR29vZC4gTm93LCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgaXQmIzM5O3MgYSBgc3RhdGljIGJvb2xgLiBBbHJpZ2h0LCBzbyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoYXQmIzM5O3MgZ29vZCBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGlubGluZWQuIElmIGl0ICppc24mIzM5O3QqLCBwZXJoYXBzIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCwgYGRhbW9zX2FwcGx5X3RhcmdldGAsIG9yIGV2ZW4gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2Agd291bGQgYmUgYmV0dGVyIGNhbmRpZGF0ZXMgdG8gc2VydmUgYXMgRm9jdXNTeW1ib2xzLCBnaXZlbiBteSBuZWVkcy4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBjb25zaWRlcmluZyB0aGUgbGF0dGVyIGdpdmVuIG15IGV4cGVydGlzZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlbS4KClNvLCBsZXQmIzM5O3MgZm9jdXMgb24gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCB6ZXJvIGluIG9uIHRob3NlIGFyZWFzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gYXBwbGllcyB0aGUgc2NoZW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNzA6XHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbjMzNzE6XHR7XG4zMzcyOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzM3MzpcdFx0c3RydWN0IGRhbW9zICpzO1xuMzM3NDpcdFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xuMzM3NTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xuMzM3NjpcdFxuMzM3NzpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzNzg6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjMzODI6XHRcdFx0XHRjb250aW51ZTtcbjMzODM6XHRcbjMzODQ6XHRcdFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xuMzM4NTpcdFxuMzM4NjpcdFx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG4zMzg3Olx0XHR9XG4zMzg4Olx0XG4zMzg5Olx0XHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxuMzM5MDpcdFx0XHRyZXR1cm47XG4zMzkxOlx0XG4zMzkyOlx0XHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuMzM5MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjMzOTQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzk1Olx0XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbjMzOTY6XHRcdFx0XHRjb250aW51ZTtcbjMzOTc6XHRcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuMzM5ODpcdFx0fVxuMzM5OTpcdFxuMzQwMDpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MDE6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzQwMjpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMzpcdFx0XHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xuMzQwNDpcdFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XG4zNDA1Olx0XHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbjM0MDY6XHRcdFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcbjM0MDc6XHRcdH1cbjM0MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjM0MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTk1CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoaXMgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGdvIG92ZXIgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBEQU1PTiBrZXJuZWwgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBpbnN0aW5jdHMgYWJvdXQgdGhlIGtleSBzeW1ib2xzIGFyZSBjb3JyZWN0LiBZZXMsIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZm9jdXMgc3ltYm9sLCBhcyBhcmUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgZnVuY3Rpb24uIEEgcXVpY2sgYGdpdCBkaWZmYCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgaW5kZWVkIGxpbWl0ZWQgdG8gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBHb29kLCBnb29kLiBObyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciBvdGhlciBtb2RpZmllZCBjb2RlLgoKTmV4dCwgdGhlIGNvbmZpZ3MuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gTm90aGluZyB1bnVzdWFsIHRoZXJlLiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gREFNT04gaXRzZWxmIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55dGhpbmcgZXhvdGljLiBEQU1PTl9TWVNGUyBqdXN0IGRlcGVuZHMgb24gREFNT04gYW5kIFNZU0ZTLiBEQU1PTl9WQUREUiBhbmQgREFNT05fUEFERFIgYWxzbyBkZXBlbmQgb24gREFNT04gYW5kIE1NVSwgYW5kIHNlbGVjdHMgUEFHRV9JRExFX0ZMQUcuIFN0YW5kYXJkIHN0dWZmLgoKRmluYWxseSwgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBndWlkZWxpbmVzIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIFRoZSBndWlkZWxpbmVzIGluZGljYXRlICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsgd2l0aCBhIGNvbmNpc2UgZXhwbGFuYXRpb246ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBza2lwIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBjaGFuZ2luZyBob3cgY2hhcmdlZCByZWdpb25zIGFuZCB0aGUgbGFzdCByZWdpb24gb2YgYSB0YXJnZXQgYXJlIGhhbmRsZWQgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDsgT2theSwgYW5kIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGFuZCAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBhcmUgYWxsIGluIG9yZGVyLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoIHNlZW1zIHNvdW5kIGFuZCB3ZWxsLXNjb3BlZC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24mIzM0OywKICAgICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV90YXJnZXQmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uJiMzNDssCiAgICAmIzM0O2RhbW9uX2RvX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2Y0NmRlZGU5YTg2YzI0NDFiYzY2ZjQ1MGM2OWM4MjJiYTA5Njc1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MDU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uODlkMWM3NzQxNzQ1MCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMjQ1MiwzNiAmIzQzOzI0NTIsMzkgQEAgc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogewogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwogCXVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDsKJiM0MzsJYm9vbCBza2lwID0gZmFsc2U7CiAKIAkvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovCiAJaWYgKHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pIHsKIAkJaWYgKHQgIT0gcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSkKIAkJCXJldHVybiB0cnVlOwotCQlpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkgewotCQkJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQogCQlpZiAocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gJmFtcDsmYW1wOwotCQkJCXItJmd0O2FyLmVuZCAmbHQ7PSBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pIHsKJiM0MzsJCQlza2lwID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAogCQlpZiAocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gJmFtcDsmYW1wOyByLSZndDthci5zdGFydCAmbHQ7CiAJCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pIHsKIAkJCXN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQotCQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KSB7CiYjNDM7CQkJCQlza2lwID0gdHJ1ZTsKJiM0MzsJCQkJCWdvdG8gb3V0OwomIzQzOwkJCQl9CiAJCQkJc3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7CiAJCQl9CiAJCQlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlza2lwID0gdHJ1ZTsKIAkJfQomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkgewogCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDsKIAkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwogCX0KLQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBza2lwOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgbGluZSAyNDUwIGluIHRoYXQgY29yZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyb2R1Y2VkIG1vZGlmaWNhdGlvbnMuIEl0JiMzOTtzIGNydWNpYWwgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiB3b3JraW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgZGFtb25gIGlzIGNvbXBsZXggZW5vdWdoIHRoYXQgYSBwcmVjaXNlIHZpZXcgb2Ygc3Vycm91bmRpbmcgbGluZXMgaXMgZXNzZW50aWFsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0ICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHJlZ2lvbiBpbnRvIHR3byBzbyB0aGF0IHRoZSBzZWNvbmQgb25lIGNvdmVycyB0aGVcbjI0NDE6XHQgKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxuMjQ0MjpcdCAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXG4yNDQzOlx0ICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhlIGNhbGxlciBzaG91bGQgdXNlIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbigpIGluc3RlYWRcbjI0NDQ6XHQgKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxuMjQ0NTpcdCAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxuMjQ0NjpcdCAqXG4yNDQ3Olx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cbjI0NDg6XHQgKi9cbjI0NDk6XHRzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNDUwOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbjI0NTE6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjQ1MjpcdHtcbjI0NTM6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjQ1NDpcdFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuMjQ1NTpcdFx0Ym9vbCBza2lwID0gZmFsc2U7XG4yNDU2Olx0XG4yNDU3Olx0XHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXG4yNDU4Olx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG4yNDU5Olx0XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbjI0NjA6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI0NjE6XHRcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4yNDYyOlx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbjI0NjM6XHRcdFx0XHRza2lwID0gdHJ1ZTtcbjI0NjQ6XHRcdFx0XHRnb3RvIG91dDtcbjI0NjU6XHRcdFx0fVxuMjQ2NjpcdFxuMjQ2NzpcdFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbjI0Njg6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbjI0Njk6XHRcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbjI0NzA6XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4yNDcxOlx0XHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4yNDcyOlx0XHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuMjQ3MzpcdFx0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbjI0NzQ6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4yNDc1Olx0XHRcdFx0XHR9XG4yNDc2Olx0XHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbjI0Nzc6XHRcdFx0XHR9XG4yNDc4Olx0XHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuMjQ3OTpcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ4MDpcdFx0XHR9XG4yNDgxOlx0XHR9XG4yNDgyOlx0b3V0OlxuMjQ4MzpcdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbjI0ODQ6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjI0ODU6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4yNDg2Olx0XHR9XG4yNDg3Olx0XHRyZXR1cm4gc2tpcDtcbjI0ODg6XHR9XG4yNDg5Olx0XG4yNDkwOlx0c3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLFxuMjQ5MTpcdFx0XHR1bnNpZ25lZCBsb25nIHN6X3RyaWVkLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQsXG4yNDkyOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpXG4yNDkzOlx0e1xuMjQ5NDpcdFx0cy1cdTAwM2VzdGF0Lm5yX3RyaWVkJiM0MzsmIzQzOztcbjI0OTU6XHRcdHMtXHUwMDNlc3RhdC5zel90cmllZCAmIzQzOz0gc3pfdHJpZWQ7XG4yNDk2Olx0XHRpZiAoc3pfYXBwbGllZClcbjI0OTc6XHRcdFx0cy1cdTAwM2VzdGF0Lm5yX2FwcGxpZWQmIzQzOyYjNDM7O1xuMjQ5ODpcdFx0cy1cdTAwM2VzdGF0LnN6X2FwcGxpZWQgJiM0Mzs9IHN6X2FwcGxpZWQ7XG4yNDk5Olx0XHRzLVx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IHN6X29wc19maWx0ZXJfcGFzc2VkO1xuMjUwMDpcdH1cbjI1MDE6XHRcbjI1MDI6XHRzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjUwMzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4yNTA0Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI1MDU6XHR7XG4yNTA2Olx0XHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbjI1MDc6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuMjUwODpcdFx0aW50IHRhcmdldF9pZHggPSAwO1xuMjUwOTpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAsIGFuZCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBjb250ZXh0LCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBhc3Nlc3MgaXRzIHB1cnBvc2UgaW4gdGhlIGJyb2FkZXIgc2NoZW1lIG9mIHRoaW5ncy4gVW5kZXJzdGFuZGluZyBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGlzIGtleSB0byBkZXRlcm1pbmluZyBpdHMgaW1wYWN0IGFuZCB3aHkgd2UmIzM5O3JlIHVzaW5nIGl0IGluIHRoaXMgc3BlY2lmaWMgbG9jYXRpb24uIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyBpdHMgJiMzNDticmVhZGNydW1iIHRyYWlsJiMzNDsgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYWxnb3JpdGhtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDI0LS8qXG5tbS9kYW1vbi9jb3JlLmM6MjQyNTogKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbm1tL2RhbW9uL2NvcmUuYy0yNDI2LSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjI0NDk6c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTI0NTAtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NzQtXG5tbS9kYW1vbi9jb3JlLmM6Mjc3NTpcdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbm1tL2RhbW9uL2NvcmUuYy0yNzc2LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQ2CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDk2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9OIFF1b3RhIExvZ2ljIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gSXQgYXBwZWFycyB0byBiZSBhIGZpeCBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHF1b3RhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBmbGF3IHdoZXJlIGl0IHVuY29uZGl0aW9uYWxseSBza2lwcGVkIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldCBpZiBpdCByZWFjaGVkIHRoYXQgcG9pbnQsIGV2ZW4gaWYgdGhlIHJlZ2lvbiB3YXMgKm5vdCogZnVsbHkgb3IgZXZlbiBwYXJ0aWFsbHkgY2hhcmdlZC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJ1Zy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGludHJvZHVjaW5nIGEgYHNraXBgIGJvb2xlYW4sIGRlZmVycmluZyB0aGUgc2tpcCBkZWNpc2lvbiBvbiB0aGUgbGFzdCByZWdpb24gdW50aWwgYSBwcm9wZXIgY2hlY2suIEl0IHZlcmlmaWVzIGlmIHNraXBwaW5nIGlzIGFwcHJvcHJpYXRlIGJhc2VkIG9uIGBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbWAgYW5kIHBvdGVudGlhbGx5IHNwbGl0cyB0aGUgcmVnaW9uLiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgaXQgbm93ICpjb25kaXRpb25hbGx5KiByZXNldHMgYHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgb25seSAqYWZ0ZXIqIHRoZSBza2lwIGRlY2lzaW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIGFuZCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC4KCk5vdywgcmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplciksIHdlIG5lZWQgdG8gYXNzZXNzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEsIGxvb2tpbmcgZm9yIHRoZSBwb3RlbnRpYWw6CjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm90IGFwcGxpY2FibGUgaGVyZSwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogVGhlIGBza2lwYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gYHN6X3RvX3NraXBgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFN0cnVjdHVyZXMgYHRgLCBgcmAsIGBzYCwgYW5kIGBxdW90YWAgYXJlIGV4aXN0aW5nIGhlYXAvaW50ZXJuYWwgREFNT04gc3RydWN0dXJlcyBhbmQgdXNlZCBhcHByb3ByaWF0ZWx5LiBTbywgbm8gaXNzdWVzIHRoZXJlLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGluIHRoaXMgcGF0Y2g7IHdlIGFyZSBtZXJlbHkgbW9kaWZ5aW5nIGV4aXN0aW5nIGxvZ2ljLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIFRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBib3VuZHMgY2hlY2tzIG9yIGFueSBjaGFuZ2UgdGhhdCB3b3VsZCBleHBvc2UgZXhpc3RpbmcgYnVmZmVycyBpbiB0aGlzIGNvZGUuCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHZhcmlhYmxlcyBhcmUgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIERBTU9OIHN0cnVjdHVyZXMuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbnRyb2wtZmxvdyBpc3N1ZSByYXRoZXIgdGhhbiBhIG1lbW9yeS1yZWxhdGVkIG9uZS4KCkZ1cnRoZXJtb3JlLCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGRpZmZlcmVuY2VzIGluIEtBU0FOIGFuZCBLTVNBTi4gVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IHRvdWNoZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gLiBJdCBmaXhlcyB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHdoZW4gdG8gc2tpcCBhIGNoYXJnZWQgcmVnaW9uIGFuZCBjb3JyZWN0bHkgcmVzZXRzIHF1b3RhIHBvaW50ZXJzIGF0IHRoZSBlbmQuIEFsbCB2YXJpYWJsZXMgdXNlZCBsb2NhbGx5IGFyZSBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gbWVtb3J5IGFsbG9jYXRpb24sIG5vIHN0YWNrL2hlYXAgdW5pbml0aWFsaXplZCByZWFkIG9wZXJhdGlvbnMsIGFuZCBubyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHJlZ2lvbiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcy4gVGhlcmUgYXJlIG5vIGRpcmVjdCBLTVNBTiByaXNrcyBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRvIGZpeCByZWdpb24gc2tpcHBpbmcgYW5kIHF1b3RhIHRyYWNraW5nIG9uIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIERBTU9OIHRhcmdldC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgc2tpcGApIGFuZCBzdHJ1Y3QgbWVtYmVycyBhY2Nlc3NlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGJyYW5jaGluZywgYW5kIG5vIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBmaXggcmVnaW9uIHNraXBwaW5nIGFuZCBxdW90YSB0cmFja2luZyBvbiB0aGUgbGFzdCByZWdpb24gb2YgYSBEQU1PTiB0YXJnZXQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNraXBgKSBhbmQgc3RydWN0IG1lbWJlcnMgYWNjZXNzZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBicmFuY2hpbmcsIGFuZCBubyBhbGxvY2F0aW9ucyBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjAwLjczNjE3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTU0OTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25cIixcbiAgICBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDAuNzM2MTgyNDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzMwNzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCBjZThjNmY5OTEwNmVkLi44OWQxYzc3NDE3NDUwIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yNDUyLDM2ICsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuK1xcdGJvb2wgc2tpcCA9IGZhbHNlO1xcbiBcXG4gXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbiBcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbiBcXHRcXHRpZiAodCAhPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdH1cXG4gXFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCBcXHUwMDNjPSBxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCBcXHUwMDNjPSBxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbitcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxuIFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XFxuIFxcdFxcdFxcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cXG4gXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6X3RvX3NraXApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XFxuK1xcdFxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbitcXHR9XFxuK291dDpcXG4rXFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4gXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuIFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBza2lwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjAxLjE2NDI3MDk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ3NTA4NTQ3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gICAgXCJkYW1vbl9kb19hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZjQ2ZGVkZTlhODZjMjQ0MWJjNjZmNDUwYzY5YzgyMmJhMDk2NzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uODlkMWM3NzQxNzQ1MCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjQ1MiwzNiArMjQ1MiwzOSBAQCBzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4gXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XG4rXHRib29sIHNraXAgPSBmYWxzZTtcbiBcbiBcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbiBcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbitcdFx0XHRza2lwID0gdHJ1ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuIFxuIFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbiBcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbiBcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbiBcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4tXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeilcbi1cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuK1x0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbitcdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbiBcdFx0XHR9XG4gXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdHNraXAgPSB0cnVlO1xuIFx0XHR9XG4rXHR9XG4rb3V0OlxuK1x0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gc2tpcDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDEuMTY0MjcyMjkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0ODY2NjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggaXMgdHVja2VkIGF3YXkgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRpbWUgdG8gZ2V0IHRoZSBtYWduaWZ5aW5nIGdsYXNzIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIE15IGluaXRpYWwgc2NhbiB3aWxsIGJlIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsIG9mIGNvdXJzZSwgYnV0IGl0J3Mgbm90IGp1c3QgYWJvdXQgdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIC0gYXJlIGFueSBuZXcgZmVhdHVyZXMgZXhwb3NlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2Ugb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzZXR0aW5ncy5cblxuVGhlbiBpdCdzIG9udG8gdGhlIGNhbGxlcnMuIFdobydzIHVzaW5nIHRoaXMgY29kZT8gV2hhdCdzIHRoZSBlbnRyeSBwb2ludD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGhzIG9mIGV4ZWN1dGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gVGltZSB0byB3aGlwIG91dCBteSBncmVwcGVyIGFuZCByZWFkLWZpbGUgdG9vbHMuIEkgd2FudCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zLCBmdW5jdGlvbiBjYWxscywgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGluZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gSSdtIGxvb2tpbmcgZm9yIGJvdGggdGhlIGltbWVkaWF0ZSBjaGFuZ2VzIGFuZCBhbnkgcmlwcGxlIGVmZmVjdHMgdGhyb3VnaG91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGlzIGluaXRpYWwgcGhhc2Ugb2YgaW52ZXN0aWdhdGlvbiB3aWxsIGZvcm0gdGhlIGZvdW5kYXRpb24gZm9yIGEgbXVjaCBkZWVwZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NywiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDcuOTEyOTQxNzMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQwOlxcdCAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlXFxuMjQ0MTpcXHQgKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxcbjI0NDI6XFx0ICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cXG4yNDQzOlxcdCAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkXFxuMjQ0NDpcXHQgKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxcbjI0NDU6XFx0ICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXFxuMjQ0NjpcXHQgKlxcbjI0NDc6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4yNDQ4OlxcdCAqL1xcbjI0NDk6XFx0c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI0NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbjI0NTE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbjI0NTI6XFx0e1xcbjI0NTM6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNDU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcXG4yNDU1OlxcdFxcdGJvb2wgc2tpcCA9IGZhbHNlO1xcbjI0NTY6XFx0XFxuMjQ1NzpcXHRcXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxuMjQ1ODpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbjI0NTk6XFx0XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG4yNDYwOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI0NjE6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxuMjQ2MjpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQgXFx1MDAzYz0gcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG4yNDYzOlxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0NjQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ2NTpcXHRcXHRcXHR9XFxuMjQ2NjpcXHRcXG4yNDY3OlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxuMjQ2ODpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbjI0Njk6XFx0XFx0XFx0XFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxcbjI0NzA6XFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbjI0NzE6XFx0XFx0XFx0XFx0aWYgKCFzel90b19za2lwKSB7XFxuMjQ3MjpcXHRcXHRcXHRcXHRcXHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcXG4yNDczOlxcdFxcdFxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ3NTpcXHRcXHRcXHRcXHRcXHR9XFxuMjQ3NjpcXHRcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4yNDc3OlxcdFxcdFxcdFxcdH1cXG4yNDc4OlxcdFxcdFxcdFxcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTtcXG4yNDc5OlxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0ODA6XFx0XFx0XFx0fVxcbjI0ODE6XFx0XFx0fVxcbjI0ODI6XFx0b3V0OlxcbjI0ODM6XFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4yNDg0OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjI0ODU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjI0ODY6XFx0XFx0fVxcbjI0ODc6XFx0XFx0cmV0dXJuIHNraXA7XFxuMjQ4ODpcXHR9XFxuMjQ4OTpcXHRcXG4yNDkwOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcXG4yNDkxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfdHJpZWQsIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCxcXG4yNDkyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpXFxuMjQ5MzpcXHR7XFxuMjQ5NDpcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3RyaWVkKys7XFxuMjQ5NTpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X3RyaWVkICs9IHN6X3RyaWVkO1xcbjI0OTY6XFx0XFx0aWYgKHN6X2FwcGxpZWQpXFxuMjQ5NzpcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX2FwcGxpZWQrKztcXG4yNDk4OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfYXBwbGllZCArPSBzel9hcHBsaWVkO1xcbjI0OTk6XFx0XFx0cy1cXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCArPSBzel9vcHNfZmlsdGVyX3Bhc3NlZDtcXG4yNTAwOlxcdH1cXG4yNTAxOlxcdFxcbjI1MDI6XFx0c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNTAzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcXG4yNTA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNTA1OlxcdHtcXG4yNTA2OlxcdFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbjI1MDc6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XFxuMjUwODpcXHRcXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XFxuMjUwOTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjA3LjkxMzE1MjI3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDcuOTU5ODY1NDc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyNjc3Mzc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIHRoaW5raW5nIGxpa2UgYSBkZXZlbG9wZXIgaW52ZXN0aWdhdGluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBDYWxscyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb24gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBUbyB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLiBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQncyBiZWluZyBpbnZva2VkIOKAkyB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSBhcmUgdXNpbmcgaXQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgaHVnZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvbGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIHBsYXlzLiBJcyBpdCBwYXJ0IG9mIGEgY3JpdGljYWwgcGF0aCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBhbmQgaG93IGl0IHNob3VsZCBiZWhhdmUsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdXNlZCBpbmNvcnJlY3RseS4gSSBuZWVkIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgYW5kIHJldmlldyB0aGUgb3RoZXIgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjA5Ljk4NjY0MTg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3MTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDI0LS8qXFxubW0vZGFtb24vY29yZS5jOjI0MjU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jLTI0MjYtICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OTpzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI0NTAtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NzQtXFxubW0vZGFtb24vY29yZS5jOjI3NzU6XFx0XFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3NzYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjEwLjAzMjYxODE1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDQ3OTI0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLiBJJ20gZ29pbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgaG93IERBTU9OIGFjdHVhbGx5ICphcHBsaWVzKiBpdHMgc2NoZW1lcy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgaGVhcnQgb2YgdGhlIGFjdGlvbiwgdGhlIHBvaW50IHdoZXJlIG1vbml0b3JpbmcgZGF0YSB0cmFuc2xhdGVzIGludG8gcHJhY3RpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFkanVzdG1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHRvdWNoZXMsIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1vbml0b3JpbmcgYW5kIGFjdGlvbi4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQgYW5kIGhvdyBpdCBhY3R1YWxseSBhcHBsaWVzIHRoZSByZXN1bHRzIG9mIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToxMS45Nzc0MTM0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1NTpcXHRcXG4yNzU2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzU3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc1ODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NTk6XFx0e1xcbjI3NjA6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NjE6XFx0XFxuMjc2MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3NjM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzY0OlxcdFxcbjI3NjU6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc2NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY3OlxcdFxcbjI3Njg6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3Njk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3MDpcXHRcXG4yNzcxOlxcdFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbjI3NzI6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3NzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3NzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3NzpcXHRcXG4yNzc4OlxcdFxcdFxcdGlmIChzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwMjZcXHUwMDI2XFxuMjc3OTpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbjI3ODA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4MTpcXHRcXG4yNzgyOlxcdFxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxuMjc4MzpcXHRcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdFxcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcXG4yNzg2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XFxuMjc4NzpcXHRcXHR9XFxuMjc4ODpcXHR9XFxuMjc4OTpcXHRcXG4yNzkwOlxcdC8qXFxuMjc5MTpcXHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxuMjc5MjpcXHQgKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbjI3OTM6XFx0ICogQHQ6XFx0XFx0XFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXFxuMjc5NDpcXHQgKiBAbWF4X3JlZ2lvbl9zejpcXHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cXG4yNzk1OlxcdCAqXFxuMjc5NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcXG4yNzk3OlxcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuMjc5ODpcXHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXFxuMjc5OTpcXHQgKiBmb3IgZWFjaCByZWdpb24uICBUaGUgbWVyZ2Ugb3BlcmF0aW9uIGlzIG1hZGUgb25seSB3aGVuIGl0IGRvZXNuJ3QgbG9zZSB0aGVcXG4yODAwOlxcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXFxuMjgwMTpcXHQgKlxcbjI4MDI6XFx0ICogSGVuY2UsIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lvbnMgY291bGRcXG4yODAzOlxcdCAqIGJlIGluY3JlYXNlZCBvciByZWR1Y2VkLiAgVGhlIGluY3JlYXNlIGNvdWxkIG1ha2UgbWF4X25yX3JlZ2lvbnMgdGVtcG9yYXJpbHlcXG4yODA0OlxcdCAqIGJlIHZpb2xhdGVkLCB1bnRpbCB0aGUgbmV4dCBwZXItYWdncmVnYXRpb24gaW50ZXJ2YWwgcmVnaW9ucyBtZXJnZSBvcGVyYXRpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MTEuOTc3NTk0MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3OTQwMzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL2RhbW9uL2NvcmUuY2AuIExvb2tpbmcgYXQgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbiwgdGhlIGNvcmUgbG9naWMgc2VlbXMgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudCB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yay4gUHJldmlvdXNseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgcmV0dXJuIHdpdGhpbiB0aGUgYGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pYCBibG9jaywgc3BlY2lmaWNhbGx5IHdoZW4gZW5jb3VudGVyaW5nIHRoZSBsYXN0IHJlZ2lvbiAoYHIgPT0gZGFtb25fbGFzdF9yZWdpb24odClgKS4gSXQgaW1tZWRpYXRlbHkgcmV0dXJuZWQgYHRydWVgIChza2lwcGluZyB0aGUgcmVnaW9uKSB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbWAgdmFsdWUuIFRoYXQncyBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBza2lwYCB2YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSByZWdpb24gKnNob3VsZCogYmUgc2tpcHBlZCwgYW5kIHRoZW4gdGhlIGxvZ2ljIHRvIGNsZWFyIG91dCB0aGUgYHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tYCBoYXBwZW5zIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIGlmIGl0J3MgdGhlIGxhc3QgcmVnaW9uLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXggYW5kIG1ha2VzIHRoZSBsb2dpYyBjbGVhcmVyLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBEQU1PTiBpcyBjZXJ0YWlubHkgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBJdCdzIGEgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhbmQgaGFzIHNldmVyYWwgdXNlci1hY2Nlc3NpYmxlIGludGVyZmFjZXMsIG5hbWVseSBzeXNmcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAgYXJlIGVuYWJsZWQuIFRoZSBmYWN0IHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFwcGVucyB2aWEgc3lzZnMgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSBRRU1VIG9yIHNpbWlsYXIgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGBrZGFtb25kYCBrZXJuZWwgdGhyZWFkIGV4ZWN1dGluZyB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uIGFzIHBhcnQgb2YgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgREFNT04gc3lzZnMgYW5kIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgdG8gdmVyaWZ5IHRoZXNlIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE3LjM1Njk5OTU5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE3LjQwNjA2OTE0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE4ODgzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBEQU1PTidzIENvcmUqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gVGhlIE1ha2VmaWxlIGlzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzLCBzbyBJJ2xsIGNoZWNrIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBjb3JlLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCB0aGUgd2F5IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgbm90aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uLiBJJ20gbG9va2luZyBmb3IgYW55IHVudXN1YWwgZmxhZ3MsIG9wdGltaXphdGlvbiBsZXZlbHMgdGhhdCBtaWdodCBhZmZlY3QgcHJvZmlsaW5nLCBvciBpbmNsdWRlIHBhdGhzIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBJIHdvdWxkbid0IHJlYWRpbHkgZXhwZWN0LiBFc3NlbnRpYWxseSwgSSdtIHZlcmlmeWluZyB0aGUgcmVjaXBlIGZvciBidWlsZGluZyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG1vbml0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTI1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MTkuNjI0OTU0OTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE5LjYyNTAxODk4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU3ODA1MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uOiBEQU1PTiBNb2R1bGUgSW5jbHVzaW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9NYWtlZmlsZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdmVyaWZ5IGlzIHdoZXRoZXIgaXQncyBnb3QgdGhlIHN0YW5kYXJkIGhvb2sgZm9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIHRoZSBEQU1PTiBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgbGluZSBgb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9gLiBUaGlzIGlzIHRoZSB0eXBpY2FsIHdheSB3ZSBtYW5hZ2Ugd2hpY2ggbW9kdWxlcyBnZXQgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBgQ09ORklHX0RBTU9OYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBmaWxlIGZvciB0aGF0IGxpbmUuIElmIGl0J3MgdGhlcmUsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgcHJvcGVybHkgaGFuZGxlIHRoZSBpbmNsdXNpb24uIElmIG5vdCwgSSd2ZSBnb3QgdG8gZmlndXJlIG91dCB3aHksIGFuZCBpZiBJIG5lZWQgdG8gbWFrZSBzb21lIG1hbnVhbCBhZGp1c3RtZW50cyBvciBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBzZXR1cCBmb3IgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyMS41ODI4MjY1MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTYzNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyMS44OTQ0NjY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTAxNTA3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBhbmQgQ2FsbCBQYXRocyoqXG5cbk9rYXksIHNvIGlmIEkndmUgZ290IGBDT05GSUdfREFNT049eWAsIHRoYXQgbWVhbnMgYG1tL2RhbW9uL2NvcmUub2AgaXMgYmVpbmcgYnVpbHQuIEFuZCwgYXMgZXhwZWN0ZWQsIHRvIGFjdHVhbGx5ICp1c2UqIERBTU9OIGZyb20gdXNlcnNwYWNlLCBJIG5lZWQgYENPTkZJR19EQU1PTl9TWVNGUz15YCDigJMgYW5kLCBvZiBjb3Vyc2UsIGVpdGhlciBgQ09ORklHX0RBTU9OX1BBRERSPXlgIG9yIGBDT05GSUdfREFNT05fVkFERFI9eWAsIGRlcGVuZGluZyBvbiB0aGUgYWRkcmVzcyBzcGFjZSBJJ20gd29ya2luZyB3aXRoLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgd2FudCB0byBzZWUgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsZXIgaGllcmFyY2h5Li4uIGFoLCByaWdodDogYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGNhbGxlZCBieSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBkYW1vc19hcHBseV90YXJnZXRgIChvciBwb3NzaWJseSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgbmVlZCB0byBjb25maXJtIHRoYXQpLiBPa2F5LCB0aW1lIHRvIHNlYXJjaCB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5IGZvciBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgdG8gbmFpbCBkb3duIHRoYXQgbGFzdCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyNC40NDQ2MTk4MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjg1PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTUtXFxubW0vZGFtb24vY29yZS5jOjI3NTY6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODE1LVxcbm1tL2RhbW9uL2NvcmUuYzoyODE2OlxcdFxcdGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcik7XFxubW0vZGFtb24vY29yZS5jLTI4MTctXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MjQuNDkxMjgzNjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTkxNTgwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgZGFtb3NfYXBwbHlfdGFyZ2V0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkYW1vc19hcHBseV90YXJnZXRgLiBMZXQncyBzZWUuLi4gbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGBkYW1vc19hcHBseV90YXJnZXRgIGlzIGludm9rZWQgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbG93IG9mIGRhdGEsIGFuZCBwaW5wb2ludCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIHdoYXQgdGhlIElERSBvciBjb2RlIHNlYXJjaCB0b29scyBjYW4gdHVybiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyNi43MTA0NDM4NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTY0NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTAtLypcXG5tbS9kYW1vbi9jb3JlLmM6Mjc5MTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxubW0vZGFtb24vY29yZS5jLTI3OTItICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODA3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyODA4OnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yODA5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzcwPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzOTYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzOTc6XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzk4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MjYuNzU3MDE0MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5Mzc0MTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgbGl2ZXMgLSBhaCB5ZXMsIGBtbS9kYW1vbi9jb3JlLmNgLiBHb29kLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCdzIHN0YXRpYyBvciBleHBvcnRlZC4gQWgsIGl0J3MgYSBgc3RhdGljIGJvb2xgLiBBbHJpZ2h0LCBzbyBpdCdzIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhhdCdzIGdvb2QgY29udGV4dC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGlubGluZWQuIElmIGl0ICppc24ndCosIHBlcmhhcHMgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgb3IgZXZlbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCB3b3VsZCBiZSBiZXR0ZXIgY2FuZGlkYXRlcyB0byBzZXJ2ZSBhcyBGb2N1c1N5bWJvbHMsIGdpdmVuIG15IG5lZWRzLiBJJ20gbGVhbmluZyB0b3dhcmQgY29uc2lkZXJpbmcgdGhlIGxhdHRlciBnaXZlbiBteSBleHBlcnRpc2UsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBleGFtaW5lIHRoZW0uXG5cblNvLCBsZXQncyBmb2N1cyBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgemVybyBpbiBvbiB0aG9zZSBhcmVhcy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGFwcGxpZXMgdGhlIHNjaGVtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjMxLjI1MDc1NzkxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNzA6XFx0c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuMzM3MTpcXHR7XFxuMzM3MjpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMzNzM6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjMzNzQ6XFx0XFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xcbjMzNzU6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xcbjMzNzY6XFx0XFxuMzM3NzpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzNzg6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzM3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzgwOlxcdFxcbjMzODE6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjMzODI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM4MzpcXHRcXG4zMzg0OlxcdFxcdFxcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbjMzODc6XFx0XFx0fVxcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxcbjMzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzOTE6XFx0XFxuMzM5MjpcXHRcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbjMzOTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjMzOTQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG4zMzk1OlxcdFxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuMzM5NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk3OlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zMzk4OlxcdFxcdH1cXG4zMzk5OlxcdFxcbjM0MDA6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDAxOlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwMzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0MDQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0MDU6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDA2OlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQwNzpcXHRcXHR9XFxuMzQwODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzEuMjUwOTUxMTQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzMzODYzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGlzIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgZ28gb3ZlciB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIERBTU9OIGtlcm5lbCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGluc3RpbmN0cyBhYm91dCB0aGUga2V5IHN5bWJvbHMgYXJlIGNvcnJlY3QuIFllcywgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBmb2N1cyBzeW1ib2wsIGFzIGFyZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AsIGBkYW1vc19hcHBseV90YXJnZXRgLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgZnVuY3Rpb24uIEEgcXVpY2sgYGdpdCBkaWZmYCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgaW5kZWVkIGxpbWl0ZWQgdG8gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBHb29kLCBnb29kLiBObyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciBvdGhlciBtb2RpZmllZCBjb2RlLlxuXG5OZXh0LCB0aGUgY29uZmlncy4gSSBzZWUgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUuIExldCBtZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIERBTU9OIGl0c2VsZiBkb2Vzbid0IHJlcXVpcmUgYW55dGhpbmcgZXhvdGljLiBEQU1PTl9TWVNGUyBqdXN0IGRlcGVuZHMgb24gREFNT04gYW5kIFNZU0ZTLiBEQU1PTl9WQUREUiBhbmQgREFNT05fUEFERFIgYWxzbyBkZXBlbmQgb24gREFNT04gYW5kIE1NVSwgYW5kIHNlbGVjdHMgUEFHRV9JRExFX0ZMQUcuIFN0YW5kYXJkIHN0dWZmLlxuXG5GaW5hbGx5LCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGd1aWRlbGluZXMgb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBUaGUgZ3VpZGVsaW5lcyBpbmRpY2F0ZSBcIldvcnRoRnV6emluZzogdHJ1ZVwiIHdpdGggYSBjb25jaXNlIGV4cGxhbmF0aW9uOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgc2tpcCBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCwgY2hhbmdpbmcgaG93IGNoYXJnZWQgcmVnaW9ucyBhbmQgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0IGFyZSBoYW5kbGVkIGR1cmluZyBzY2hlbWUgYXBwbGljYXRpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiIE9rYXksIGFuZCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBhbmQgXCJFbmFibGVDb25maWdzXCIgYXJlIGFsbCBpbiBvcmRlci5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoIHNlZW1zIHNvdW5kIGFuZCB3ZWxsLXNjb3BlZC4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTUsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzUuODI0MzQwMzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3ODI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvblwiLFxuICAgIFwiZGFtb25fZG9fYXBwbHlfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gICAgXCJkYW1vbl9kb19hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzUuOTE1MTI4OTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NjU4OTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjM1LjkxNTY5MzE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NDU2MDIxMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjA1OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi44OWQxYzc3NDE3NDUwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNDUyLDM2ICsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbitcdGJvb2wgc2tpcCA9IGZhbHNlO1xuIFxuIFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuIFx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuIFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuK1x0XHRcdHNraXAgPSB0cnVlO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuIFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuIFx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuIFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbi1cdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxuLVx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4rXHRcdFx0XHRcdHNraXAgPSB0cnVlO1xuK1x0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0c2tpcCA9IHRydWU7XG4gXHRcdH1cbitcdH1cbitvdXQ6XG4rXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuIFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuIFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBza2lwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTozNS45MTU2OTQxODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc2MjY3NzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcy4gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgbGluZSAyNDUwIGluIHRoYXQgY29yZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyb2R1Y2VkIG1vZGlmaWNhdGlvbnMuIEl0J3MgY3J1Y2lhbCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlIGF0IHRoYXQgc3BlY2lmaWMgbG9jYXRpb24uIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGBkYW1vbmAgaXMgY29tcGxleCBlbm91Z2ggdGhhdCBhIHByZWNpc2UgdmlldyBvZiBzdXJyb3VuZGluZyBsaW5lcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhdGNoIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6NDEuNjc4Mzc1NTA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0MDpcXHQgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxcbjI0NDE6XFx0ICogYXJlYSB0aGF0IG5vdCBjaGFyZ2VkIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2lkbm93LCBhbmQgcmV0dXJuIHRydWUuICBUaGVcXG4yNDQyOlxcdCAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXFxuMjQ0MzpcXHQgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxcbjI0NDQ6XFx0ICogb2YgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKS4gIElmIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkgaXMgdXNlZCxcXG4yNDQ1OlxcdCAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxcbjI0NDY6XFx0ICpcXG4yNDQ3OlxcdCAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuMjQ0ODpcXHQgKi9cXG4yNDQ5OlxcdHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4yNDUxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNDUyOlxcdHtcXG4yNDUzOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjQ1NDpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuMjQ1NTpcXHRcXHRib29sIHNraXAgPSBmYWxzZTtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbjI0NTg6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcXG4yNDU5OlxcdFxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxuMjQ2MDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yNDYxOlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNlxcbjI0NjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XFxuMjQ2MzpcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDY0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0NjU6XFx0XFx0XFx0fVxcbjI0NjY6XFx0XFxuMjQ2NzpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbjI0Njg6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG4yNDY5OlxcdFxcdFxcdFxcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cXG4yNDcwOlxcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcXG4yNDcxOlxcdFxcdFxcdFxcdGlmICghc3pfdG9fc2tpcCkge1xcbjI0NzI6XFx0XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XFxuMjQ3MzpcXHRcXHRcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDc0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0NzU6XFx0XFx0XFx0XFx0XFx0fVxcbjI0NzY6XFx0XFx0XFx0XFx0XFx0c3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7XFxuMjQ3NzpcXHRcXHRcXHRcXHR9XFxuMjQ3ODpcXHRcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuMjQ3OTpcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDgwOlxcdFxcdFxcdH1cXG4yNDgxOlxcdFxcdH1cXG4yNDgyOlxcdG91dDpcXG4yNDgzOlxcdFxcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XFxuMjQ4NDpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4yNDg1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4yNDg2OlxcdFxcdH1cXG4yNDg3OlxcdFxcdHJldHVybiBza2lwO1xcbjI0ODg6XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXFxuMjQ5MTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN6X3RyaWVkLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQsXFxuMjQ5MjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkKVxcbjI0OTM6XFx0e1xcbjI0OTQ6XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl90cmllZCsrO1xcbjI0OTU6XFx0XFx0cy1cXHUwMDNlc3RhdC5zel90cmllZCArPSBzel90cmllZDtcXG4yNDk2OlxcdFxcdGlmIChzel9hcHBsaWVkKVxcbjI0OTc6XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkKys7XFxuMjQ5ODpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X2FwcGxpZWQgKz0gc3pfYXBwbGllZDtcXG4yNDk5OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgKz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XFxuMjUwMDpcXHR9XFxuMjUwMTpcXHRcXG4yNTAyOlxcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjUwMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuMjUwNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjUwNTpcXHR7XFxuMjUwNjpcXHRcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4yNTA3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbjI1MDg6XFx0XFx0aW50IHRhcmdldF9pZHggPSAwO1xcbjI1MDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo0MS42Nzg2NDIyMTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NTU1MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24sIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyBpdHMgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIGdpdmUgbWUgY29udGV4dCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZSBvZiB0aGluZ3MuIFVuZGVyc3RhbmRpbmcgaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBpcyBrZXkgdG8gZGV0ZXJtaW5pbmcgaXRzIGltcGFjdCBhbmQgd2h5IHdlJ3JlIHVzaW5nIGl0IGluIHRoaXMgc3BlY2lmaWMgbG9jYXRpb24uIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIGl0cyBcImJyZWFkY3J1bWIgdHJhaWxcIiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBhbGdvcml0aG0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjQzLjk1NDE5NzE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyODAzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MTM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyNC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNDI1OiAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxcbm1tL2RhbW9uL2NvcmUuYy0yNDI2LSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NDgtICovXFxubW0vZGFtb24vY29yZS5jOjI0NDk6c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNDUwLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzc0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzc1OlxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzc2LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo0NS44ODcwMDY1MTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NDY4NzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9OIFF1b3RhIExvZ2ljIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIEl0IGFwcGVhcnMgdG8gYmUgYSBmaXggaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBxdW90YSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZmxhdyB3aGVyZSBpdCB1bmNvbmRpdGlvbmFsbHkgc2tpcHBlZCB0aGUgbGFzdCByZWdpb24gb2YgYSB0YXJnZXQgaWYgaXQgcmVhY2hlZCB0aGF0IHBvaW50LCBldmVuIGlmIHRoZSByZWdpb24gd2FzICpub3QqIGZ1bGx5IG9yIGV2ZW4gcGFydGlhbGx5IGNoYXJnZWQuIFRoYXQncyBhIGRlZmluaXRlIGJ1Zy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgaW50cm9kdWNpbmcgYSBgc2tpcGAgYm9vbGVhbiwgZGVmZXJyaW5nIHRoZSBza2lwIGRlY2lzaW9uIG9uIHRoZSBsYXN0IHJlZ2lvbiB1bnRpbCBhIHByb3BlciBjaGVjay4gSXQgdmVyaWZpZXMgaWYgc2tpcHBpbmcgaXMgYXBwcm9wcmlhdGUgYmFzZWQgb24gYHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb21gIGFuZCBwb3RlbnRpYWxseSBzcGxpdHMgdGhlIHJlZ2lvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyAqY29uZGl0aW9uYWxseSogcmVzZXRzIGBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgb25seSAqYWZ0ZXIqIHRoZSBza2lwIGRlY2lzaW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIGFuZCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC5cblxuTm93LCByZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgd2UgbmVlZCB0byBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLCBsb29raW5nIGZvciB0aGUgcG90ZW50aWFsOlxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBOb3QgYXBwbGljYWJsZSBoZXJlLCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogVGhlIGBza2lwYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gYHN6X3RvX3NraXBgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFN0cnVjdHVyZXMgYHRgLCBgcmAsIGBzYCwgYW5kIGBxdW90YWAgYXJlIGV4aXN0aW5nIGhlYXAvaW50ZXJuYWwgREFNT04gc3RydWN0dXJlcyBhbmQgdXNlZCBhcHByb3ByaWF0ZWx5LiBTbywgbm8gaXNzdWVzIHRoZXJlLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBpbiB0aGlzIHBhdGNoOyB3ZSBhcmUgbWVyZWx5IG1vZGlmeWluZyBleGlzdGluZyBsb2dpYy5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgYm91bmRzIGNoZWNrcyBvciBhbnkgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gdGhpcyBjb2RlLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSB2YXJpYWJsZXMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBEQU1PTiBzdHJ1Y3R1cmVzLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb250cm9sLWZsb3cgaXNzdWUgcmF0aGVyIHRoYW4gYSBtZW1vcnktcmVsYXRlZCBvbmUuXG5cbkZ1cnRoZXJtb3JlLCBsZXQncyBjb25zaWRlciB0aGUgZGlmZmVyZW5jZXMgaW4gS0FTQU4gYW5kIEtNU0FOLiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgdG91Y2hlcyB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEl0IGZpeGVzIHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiB0byBza2lwIGEgY2hhcmdlZCByZWdpb24gYW5kIGNvcnJlY3RseSByZXNldHMgcXVvdGEgcG9pbnRlcnMgYXQgdGhlIGVuZC4gQWxsIHZhcmlhYmxlcyB1c2VkIGxvY2FsbHkgYXJlIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBzdGFjay9oZWFwIHVuaW5pdGlhbGl6ZWQgcmVhZCBvcGVyYXRpb25zLCBhbmQgbm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChyZWdpb24gbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBtZW1vcnkgc2FmZXR5IG1lY2hhbmlzbXMuIFRoZXJlIGFyZSBubyBkaXJlY3QgS01TQU4gcmlza3MgaGVyZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo1Mi4zNzE2OTY1MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBmaXggcmVnaW9uIHNraXBwaW5nIGFuZCBxdW90YSB0cmFja2luZyBvbiB0aGUgbGFzdCByZWdpb24gb2YgYSBEQU1PTiB0YXJnZXQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNraXBgKSBhbmQgc3RydWN0IG1lbWJlcnMgYWNjZXNzZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBicmFuY2hpbmcsIGFuZCBubyBhbGxvY2F0aW9ucyBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRvIGZpeCByZWdpb24gc2tpcHBpbmcgYW5kIHF1b3RhIHRyYWNraW5nIG9uIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIERBTU9OIHRhcmdldC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgc2tpcGApIGFuZCBzdHJ1Y3QgbWVtYmVycyBhY2Nlc3NlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGJyYW5jaGluZywgYW5kIG5vIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 17:02:54 +0000 UTC FinishedAt: 2026-09-08 17:05:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "7dbd9c69-5f3a-4a32-9932-19953413f8d6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_skip_charged_region", "damon_do_apply_schemes", "damos_apply_target", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9kb19hcHBseV9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZjQ2ZGVkZTlhODZjMjQ0MWJjNjZmNDUwYzY5YzgyMmJhMDk2NzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjg5ZDFjNzc0MTc0NTAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI0NTIsMzYgJiM0MzsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbiYjNDM7XHRib29sIHNraXAgPSBmYWxzZTtcbiBcbiBcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbiBcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0ci1cdTAwM2Vhci5lbmQgXHUwMDNjPSBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4mIzQzO1x0XHRcdHNraXAgPSB0cnVlO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2IHItXHUwMDNlYXIuc3RhcnQgXHUwMDNjXG4gXHRcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XG4gXHRcdFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSAtXG4gXHRcdFx0XHRcdHItXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xuIFx0XHRcdGlmICghc3pfdG9fc2tpcCkge1xuLVx0XHRcdFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcdTAwM2M9IG1pbl9yZWdpb25fc3opXG4tXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4mIzQzO1x0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdHNraXAgPSB0cnVlO1xuIFx0XHR9XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIHNraXA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24mIzM0OywKICAgICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV90YXJnZXQmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjA1OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjg5ZDFjNzc0MTc0NTAgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI0NTIsMzYgJiM0MzsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIHsKIAlzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gJmFtcDtzLSZndDtxdW90YTsKIAl1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7CiYjNDM7CWJvb2wgc2tpcCA9IGZhbHNlOwogCiAJLyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqLwogCWlmIChxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tKSB7CiAJCWlmICh0ICE9IHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKLQkJCXF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMOwotCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KIAkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsKLQkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pCi0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJci0mZ3Q7YXIuZW5kICZsdDs9IHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tKSB7CiYjNDM7CQkJc2tpcCA9IHRydWU7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiAKIAkJaWYgKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tICZhbXA7JmFtcDsgci0mZ3Q7YXIuc3RhcnQgJmx0OwogCQkJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tKSB7CiAJCQlzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSAtCiAJCQkJCXItJmd0O2FyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTsKIAkJCWlmICghc3pfdG9fc2tpcCkgewotCQkJCWlmIChkYW1vbl9zel9yZWdpb24ocikgJmx0Oz0gbWluX3JlZ2lvbl9zeikKLQkJCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJCWlmIChkYW1vbl9zel9yZWdpb24ocikgJmx0Oz0gbWluX3JlZ2lvbl9zeikgewomIzQzOwkJCQkJc2tpcCA9IHRydWU7CiYjNDM7CQkJCQlnb3RvIG91dDsKJiM0MzsJCQkJfQogCQkJCXN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6OwogCQkJfQogCQkJZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApOwotCQkJcmV0dXJuIHRydWU7CiYjNDM7CQkJc2tpcCA9IHRydWU7CiAJCX0KJiM0MzsJfQomIzQzO291dDoKJiM0MzsJaWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHsKIAkJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7CiAJCXF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tID0gMDsKIAl9Ci0JcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gc2tpcDsKIH0KIAogc3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc3CgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gUGF0Y2gqKgoKQWxyaWdodCwgdGhlIHBhdGNoIGlzIHR1Y2tlZCBhd2F5IGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaW1lIHRvIGdldCB0aGUgbWFnbmlmeWluZyBnbGFzcyBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHNjYW4gd2lsbCBiZSB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3Mgbm90IGp1c3QgYWJvdXQgdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSByZWxhdGVkIEtjb25maWcgb3B0aW9ucyAtIGFyZSBhbnkgbmV3IGZlYXR1cmVzIGV4cG9zZWQ/IEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zPyBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzZXR0aW5ncy4KClRoZW4gaXQmIzM5O3Mgb250byB0aGUgY2FsbGVycy4gV2hvJiMzOTtzIHVzaW5nIHRoaXMgY29kZT8gV2hhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoZXNlIGNoYW5nZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBwYXRocyBvZiBleGVjdXRpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gVGltZSB0byB3aGlwIG91dCBteSBncmVwcGVyIGFuZCByZWFkLWZpbGUgdG9vbHMuIEkgd2FudCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zLCBmdW5jdGlvbiBjYWxscywgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGluZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gSSYjMzk7bSBsb29raW5nIGZvciBib3RoIHRoZSBpbW1lZGlhdGUgY2hhbmdlcyBhbmQgYW55IHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gVGhpcyBpbml0aWFsIHBoYXNlIG9mIGludmVzdGlnYXRpb24gd2lsbCBmb3JtIHRoZSBmb3VuZGF0aW9uIGZvciBhIG11Y2ggZGVlcGVyIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NDA6XHQgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxuMjQ0MTpcdCAqIGFyZWEgdGhhdCBub3QgY2hhcmdlZCBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpZG5vdywgYW5kIHJldHVybiB0cnVlLiAgVGhlXG4yNDQyOlx0ICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cbjI0NDM6XHQgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxuMjQ0NDpcdCAqIG9mIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkuICBJZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpIGlzIHVzZWQsXG4yNDQ1Olx0ICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXG4yNDQ2Olx0ICpcbjI0NDc6XHQgKiBSZXR1cm46IHRydWUgaWYgdGhlIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuMjQ0ODpcdCAqL1xuMjQ0OTpcdHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI0NTA6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuMjQ1MTpcdFx0XHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4yNDUyOlx0e1xuMjQ1MzpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNDU0Olx0XHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XG4yNDU1Olx0XHRib29sIHNraXAgPSBmYWxzZTtcbjI0NTY6XHRcbjI0NTc6XHRcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbjI0NTg6XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbjI0NTk6XHRcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuMjQ2MDpcdFx0XHRcdHJldHVybiB0cnVlO1xuMjQ2MTpcdFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbjI0NjI6XHRcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuMjQ2MzpcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ2NDpcdFx0XHRcdGdvdG8gb3V0O1xuMjQ2NTpcdFx0XHR9XG4yNDY2Olx0XG4yNDY3Olx0XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuMjQ2ODpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuMjQ2OTpcdFx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuMjQ3MDpcdFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbjI0NzE6XHRcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbjI0NzI6XHRcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4yNDczOlx0XHRcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ3NDpcdFx0XHRcdFx0XHRnb3RvIG91dDtcbjI0NzU6XHRcdFx0XHRcdH1cbjI0NzY6XHRcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuMjQ3NzpcdFx0XHRcdH1cbjI0Nzg6XHRcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4yNDc5Olx0XHRcdFx0c2tpcCA9IHRydWU7XG4yNDgwOlx0XHRcdH1cbjI0ODE6XHRcdH1cbjI0ODI6XHRvdXQ6XG4yNDgzOlx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuMjQ4NDpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuMjQ4NTpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjI0ODY6XHRcdH1cbjI0ODc6XHRcdHJldHVybiBza2lwO1xuMjQ4ODpcdH1cbjI0ODk6XHRcbjI0OTA6XHRzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXG4yNDkxOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfdHJpZWQsIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCxcbjI0OTI6XHRcdFx0dW5zaWduZWQgbG9uZyBzel9vcHNfZmlsdGVyX3Bhc3NlZClcbjI0OTM6XHR7XG4yNDk0Olx0XHRzLVx1MDAzZXN0YXQubnJfdHJpZWQmIzQzOyYjNDM7O1xuMjQ5NTpcdFx0cy1cdTAwM2VzdGF0LnN6X3RyaWVkICYjNDM7PSBzel90cmllZDtcbjI0OTY6XHRcdGlmIChzel9hcHBsaWVkKVxuMjQ5NzpcdFx0XHRzLVx1MDAzZXN0YXQubnJfYXBwbGllZCYjNDM7JiM0Mzs7XG4yNDk4Olx0XHRzLVx1MDAzZXN0YXQuc3pfYXBwbGllZCAmIzQzOz0gc3pfYXBwbGllZDtcbjI0OTk6XHRcdHMtXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XG4yNTAwOlx0fVxuMjUwMTpcdFxuMjUwMjpcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTAzOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcbjI1MDQ6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjUwNTpcdHtcbjI1MDY6XHRcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xuMjUwNzpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XG4yNTA4Olx0XHRpbnQgdGFyZ2V0X2lkeCA9IDA7XG4yNTA5Olx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWc6NjpcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTctXHRoZWxwXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZzoxNjpcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTc6XHRkZXBlbmRzIG9uIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTE4LVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxOTpcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxubW0vZGFtb24vS2NvbmZpZzoyMDpcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXG5tbS9kYW1vbi9LY29uZmlnLTIxLVx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnOjI4Olx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxubW0vZGFtb24vS2NvbmZpZy0yOS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG5tbS9kYW1vbi9LY29uZmlnLTMwLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzozMTpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjQwOlx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG5tbS9kYW1vbi9LY29uZmlnLTQxLVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG5tbS9kYW1vbi9LY29uZmlnOjQyOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy00My1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbm1tL2RhbW9uL0tjb25maWctNDUtXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxubW0vZGFtb24vS2NvbmZpZy01MC1cdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xubW0vZGFtb24vS2NvbmZpZzo1MTpcdGRlZmF1bHQgREFNT05cbm1tL2RhbW9uL0tjb25maWctNTItXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjUzOlx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTU0LVx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnOjU3Olx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTU5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctNjAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjYxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxubW0vZGFtb24vS2NvbmZpZy02Mi1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWc6Njk6XHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9kYW1vbi9LY29uZmlnOjcxOlx0ZGVmYXVsdCBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy03Mi1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6NzM6XHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxubW0vZGFtb24vS2NvbmZpZy03NC1cdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWc6Nzg6XHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5tbS9kYW1vbi9LY29uZmlnLTc5LVx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbm1tL2RhbW9uL0tjb25maWctODAtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjgxOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXG5tbS9kYW1vbi9LY29uZmlnLTgyLVxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnOjg5Olx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzo5MDpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctOTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjkyOlx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcbm1tL2RhbW9uL0tjb25maWc6OTM6XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbm1tL2RhbW9uL0tjb25maWctOTQtXHQgIHRob3NlLlxuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWc6MTAxOlx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnOjEwMjpcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctMTAzLVx0aGVscFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xubW0vZGFtb24vS2NvbmZpZy0xMDUtXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZzoxMDk6XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbm1tL2RhbW9uL0tjb25maWc6MTEwOlx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy0xMTEtXHRoZWxwXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIGFjY2VzcyBtb25pdG9yaW5nIHN0YXRpc3RpY3Mgc3Vic3lzdGVtLlxubW0vZGFtb24vS2NvbmZpZzoxMTM6XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG5tbS9kYW1vbi9LY29uZmlnLTExNC1cdCAgbWV0cmljcy5cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnOjExNzpcdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xubW0vZGFtb24vS2NvbmZpZzoxMTg6XHRkZXBlbmRzIG9uIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWc6MTE5Olx0ZGVmYXVsdCBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEyMC1cdGhlbHBcbm1tL2RhbW9uL0tjb25maWc6MTIxOlx0ICBXaGV0aGVyIHRvIGVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHQuICBVc2VycyBjYW4gZGlzYWJsZSBpdCBpblxubW0vZGFtb24vS2NvbmZpZy0xMjItXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJiMzOTtlbmFibGVkJiMzOTsgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIHRoaW5raW5nIGxpa2UgYSBkZXZlbG9wZXIgaW52ZXN0aWdhdGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgQ2FsbHMqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIFRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLiBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQmIzM5O3MgYmVpbmcgaW52b2tlZCDigJMgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UgYXJlIHVzaW5nIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb2xlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBwbGF5cy4gSXMgaXQgcGFydCBvZiBhIGNyaXRpY2FsIHBhdGgsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgYW5kIGhvdyBpdCBzaG91bGQgYmVoYXZlLCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVzZWQgaW5jb3JyZWN0bHkuIEkgbmVlZCB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFuZCByZXZpZXcgdGhlIG90aGVyIGNhbGxlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQyNC0vKlxubW0vZGFtb24vY29yZS5jOjI0MjU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG5tbS9kYW1vbi9jb3JlLmMtMjQyNi0gKiBpdCBpcyBhbHJlYWR5IGNoYXJnZWQgZm9yIHRoZSBEQU1PUyBxdW90YS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyNDQ5OnN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yNDUwLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzc0LVxubW0vZGFtb24vY29yZS5jOjI3NzU6XHRcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXHUwMDNlbWluX3JlZ2lvbl9zeikpXG5tbS9kYW1vbi9jb3JlLmMtMjc3Ni1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AqKgoKT2theSwgdGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLiBJJiMzOTttIGdvaW5nIGludG8gYG1tL2RhbW9uL2NvcmUuY2AgdG8gc2VlIGhvdyBEQU1PTiBhY3R1YWxseSAqYXBwbGllcyogaXRzIHNjaGVtZXMuIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGhlYXJ0IG9mIHRoZSBhY3Rpb24sIHRoZSBwb2ludCB3aGVyZSBtb25pdG9yaW5nIGRhdGEgdHJhbnNsYXRlcyBpbnRvIHByYWN0aWNhbCBtZW1vcnkgbWFuYWdlbWVudCBhZGp1c3RtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB0b3VjaGVzLCBhbmQgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgcGFnZSB0YWJsZXMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25jdXJyZW5jeSBpc3N1ZXMgSSBzaG91bGQga2VlcCBhbiBleWUgb24uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbW9uaXRvcmluZyBhbmQgYWN0aW9uLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIGl0JiMzOTtzIGRlc2lnbmVkIGFuZCBob3cgaXQgYWN0dWFsbHkgYXBwbGllcyB0aGUgcmVzdWx0cyBvZiB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzU1Olx0XG4yNzU2Olx0c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuMjc1NzpcdFx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI3NTg6XHRcdFx0XHRcdCAgIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4yNzU5Olx0e1xuMjc2MDpcdFx0c3RydWN0IGRhbW9zICpzO1xuMjc2MTpcdFxuMjc2MjpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjI3NjM6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4yNzY0Olx0XG4yNzY1Olx0XHRcdGlmICh0aW1lX2JlZm9yZShjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVx1MDAzZW5leHRfYXBwbHlfc2lzKSlcbjI3NjY6XHRcdFx0XHRjb250aW51ZTtcbjI3Njc6XHRcbjI3Njg6XHRcdFx0aWYgKCFzLVx1MDAzZXdtYXJrcy5hY3RpdmF0ZWQpXG4yNzY5Olx0XHRcdFx0Y29udGludWU7XG4yNzcwOlx0XG4yNzcxOlx0XHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xuMjc3MjpcdFx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjI3NzM6XHRcdFx0XHRjb250aW51ZTtcbjI3NzQ6XHRcbjI3NzU6XHRcdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjI3NzY6XHRcdFx0XHRjb250aW51ZTtcbjI3Nzc6XHRcbjI3Nzg6XHRcdFx0aWYgKHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwMjZcdTAwMjZcbjI3Nzk6XHRcdFx0XHRcdHMtXHUwMDNlbWF4X25yX3NuYXBzaG90cyBcdTAwM2M9IHMtXHUwMDNlc3RhdC5ucl9zbmFwc2hvdHMpXG4yNzgwOlx0XHRcdFx0Y29udGludWU7XG4yNzgxOlx0XG4yNzgyOlx0XHRcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXG4yNzgzOlx0XHRcdFx0ZGFtb3NfYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMpO1xuMjc4NDpcdFxuMjc4NTpcdFx0XHRpZiAoZGFtb25faXNfbGFzdF9yZWdpb24ociwgdCkpXG4yNzg2Olx0XHRcdFx0cy1cdTAwM2VzdGF0Lm5yX3NuYXBzaG90cyYjNDM7JiM0Mzs7XG4yNzg3Olx0XHR9XG4yNzg4Olx0fVxuMjc4OTpcdFxuMjc5MDpcdC8qXG4yNzkxOlx0ICogZGFtb3NfYXBwbHlfdGFyZ2V0KCkgLSBBcHBseSBEQU1PUyBzY2hlbWVzIHRvIGEgZ2l2ZW4gdGFyZ2V0LlxuMjc5MjpcdCAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4yNzkzOlx0ICogQHQ6XHRcdFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXG4yNzk0Olx0ICogQG1heF9yZWdpb25fc3o6XHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cbjI3OTU6XHQgKlxuMjc5NjpcdCAqIFRoaXMgZnVuY3Rpb24gY291bGQgc3BsaXQgcmVnaW9ucyBmb3Iga2VlcGluZyB0aGUgcXVvdGEuICBUbyBtaW5pbWl6ZVxuMjc5NzpcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXG4yNzk4Olx0ICogZnVuY3Rpb24gd2lsbCBhbHNvIG1lcmdlIHJlZ2lvbnMgYWZ0ZXIgdGhlIHNjaGVtZXMgYXBwbHlpbmcgYXR0ZW1wdCBpcyBkb25lLFxuMjc5OTpcdCAqIGZvciBlYWNoIHJlZ2lvbi4gIFRoZSBtZXJnZSBvcGVyYXRpb24gaXMgbWFkZSBvbmx5IHdoZW4gaXQgZG9lc24mIzM5O3QgbG9zZSB0aGVcbjI4MDA6XHQgKiBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGFuZCBub3QgdmlvbGF0aW5nIEBtYXhfcmVnaW9uX3N6LlxuMjgwMTpcdCAqXG4yODAyOlx0ICogSGVuY2UsIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lvbnMgY291bGRcbjI4MDM6XHQgKiBiZSBpbmNyZWFzZWQgb3IgcmVkdWNlZC4gIFRoZSBpbmNyZWFzZSBjb3VsZCBtYWtlIG1heF9ucl9yZWdpb25zIHRlbXBvcmFyaWx5XG4yODA0Olx0ICogYmUgdmlvbGF0ZWQsIHVudGlsIHRoZSBuZXh0IHBlci1hZ2dyZWdhdGlvbiBpbnRlcnZhbCByZWdpb25zIG1lcmdlIG9wZXJhdGlvblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0byBgbW0vZGFtb24vY29yZS5jYC4gTG9va2luZyBhdCB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLCB0aGUgY29yZSBsb2dpYyBzZWVtcyByZWxhdGVkIHRvIHF1b3RhIGVuZm9yY2VtZW50IHdpdGhpbiB0aGUgREFNT04gZnJhbWV3b3JrLiBQcmV2aW91c2x5LCB0aGUgY29kZSBoYWQgYSBjb25kaXRpb25hbCByZXR1cm4gd2l0aGluIHRoZSBgaWYgKHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pYCBibG9jaywgc3BlY2lmaWNhbGx5IHdoZW4gZW5jb3VudGVyaW5nIHRoZSBsYXN0IHJlZ2lvbiAoYHIgPT0gZGFtb25fbGFzdF9yZWdpb24odClgKS4gSXQgaW1tZWRpYXRlbHkgcmV0dXJuZWQgYHRydWVgIChza2lwcGluZyB0aGUgcmVnaW9uKSB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBgcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb21gIHZhbHVlLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG92ZXJzaWdodC4gVGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHNraXBgIHZhcmlhYmxlIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHJlZ2lvbiAqc2hvdWxkKiBiZSBza2lwcGVkLCBhbmQgdGhlbiB0aGUgbG9naWMgdG8gY2xlYXIgb3V0IHRoZSBgcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbWAgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBpZiBpdCYjMzk7cyB0aGUgbGFzdCByZWdpb24uIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCBhbmQgbWFrZXMgdGhlIGxvZ2ljIGNsZWFyZXIuCgpOb3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBEQU1PTiBpcyBjZXJ0YWlubHkgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBJdCYjMzk7cyBhIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgYW5kIGhhcyBzZXZlcmFsIHVzZXItYWNjZXNzaWJsZSBpbnRlcmZhY2VzLCBuYW1lbHkgc3lzZnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUEFERFJgIGFyZSBlbmFibGVkLiBUaGUgZmFjdCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGhhcHBlbnMgdmlhIHN5c2ZzIG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgUUVNVSBvciBzaW1pbGFyIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBga2RhbW9uZGAga2VybmVsIHRocmVhZCBleGVjdXRpbmcgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbiBhcyBwYXJ0IG9mIERBTU9TIHF1b3RhIGVuZm9yY2VtZW50IGlzIHRoZSB0YXJnZXQuIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgZm9yIERBTU9OIHN5c2ZzIGFuZCBvdGhlciByZWxldmFudCBjb25maWdzIHRvIHZlcmlmeSB0aGVzZSBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBEQU1PTiYjMzk7cyBDb3JlKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gVGhlIE1ha2VmaWxlIGlzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzLCBzbyBJJiMzOTtsbCBjaGVjayBgbW0vZGFtb24vTWFrZWZpbGVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiB0aGUgY29tcGlsYXRpb24gZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGhvdyBgY29yZS5jYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNvbXBpbGF0aW9uIGVudmlyb25tZW50IGlzIGNvbmZpZ3VyZWQgdGhlIHdheSBJIHRoaW5rIGl0IGlzIGFuZCB0aGF0IG5vdGhpbmcgdW5leHBlY3RlZCBpcyBnb2luZyBvbi4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBmbGFncywgb3B0aW1pemF0aW9uIGxldmVscyB0aGF0IG1pZ2h0IGFmZmVjdCBwcm9maWxpbmcsIG9yIGluY2x1ZGUgcGF0aHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJlaGF2aW9yYWwgY2hhbmdlcyB0aGF0IEkgd291bGRuJiMzOTt0IHJlYWRpbHkgZXhwZWN0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhlIHJlY2lwZSBmb3IgYnVpbGRpbmcgdGhpcyBjcnVjaWFsIHBpZWNlIG9mIHRoZSBtb25pdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAwOAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKk1ha2VmaWxlIEludmVzdGlnYXRpb246IERBTU9OIE1vZHVsZSBJbmNsdXNpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9NYWtlZmlsZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdmVyaWZ5IGlzIHdoZXRoZXIgaXQmIzM5O3MgZ290IHRoZSBzdGFuZGFyZCBob29rIGZvciBjb25kaXRpb25hbGx5IGluY2x1ZGluZyB0aGUgREFNT04gbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGxpbmUgYG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL2AuIFRoaXMgaXMgdGhlIHR5cGljYWwgd2F5IHdlIG1hbmFnZSB3aGljaCBtb2R1bGVzIGdldCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgYmFzZWQgb24gdGhlIGBDT05GSUdfREFNT05gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGZpbGUgZm9yIHRoYXQgbGluZS4gSWYgaXQmIzM5O3MgdGhlcmUsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgcHJvcGVybHkgaGFuZGxlIHRoZSBpbmNsdXNpb24uIElmIG5vdCwgSSYjMzk7dmUgZ290IHRvIGZpZ3VyZSBvdXQgd2h5LCBhbmQgaWYgSSBuZWVkIHRvIG1ha2Ugc29tZSBtYW51YWwgYWRqdXN0bWVudHMgb3IgaW52ZXN0aWdhdGUgdGhlIEtjb25maWcgc2V0dXAgZm9yIERBTU9OLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzNj1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICYjNDM7PSBkZWJ1Z19wYWdlX3JlZi5vXG5tbS9NYWtlZmlsZToxMzc6b2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vXG5tbS9NYWtlZmlsZS0xMzgtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSAmIzQzOz0gdXNlcmNvcHkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTMwOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBDYWxsIFBhdGhzKioKCk9rYXksIHNvIGlmIEkmIzM5O3ZlIGdvdCBgQ09ORklHX0RBTU9OPXlgLCB0aGF0IG1lYW5zIGBtbS9kYW1vbi9jb3JlLm9gIGlzIGJlaW5nIGJ1aWx0LiBBbmQsIGFzIGV4cGVjdGVkLCB0byBhY3R1YWxseSAqdXNlKiBEQU1PTiBmcm9tIHVzZXJzcGFjZSwgSSBuZWVkIGBDT05GSUdfREFNT05fU1lTRlM9eWAg4oCTIGFuZCwgb2YgY291cnNlLCBlaXRoZXIgYENPTkZJR19EQU1PTl9QQUREUj15YCBvciBgQ09ORklHX0RBTU9OX1ZBRERSPXlgLCBkZXBlbmRpbmcgb24gdGhlIGFkZHJlc3Mgc3BhY2UgSSYjMzk7bSB3b3JraW5nIHdpdGguCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgd2FudCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGZyb20uIExldCBtZSB0cmFjZSB0aGUgY2FsbGVyIGhpZXJhcmNoeS4uLiBhaCwgcmlnaHQ6IGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBpcyBjYWxsZWQgYnkgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBieSBgZGFtb3NfYXBwbHlfdGFyZ2V0YCAob3IgcG9zc2libHkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AsIG5lZWQgdG8gY29uZmlybSB0aGF0KS4gT2theSwgdGltZSB0byBzZWFyY2ggdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBmb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgIHRvIG5haWwgZG93biB0aGF0IGxhc3QgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjY4NT1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc1NS1cbm1tL2RhbW9uL2NvcmUuYzoyNzU2OnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjgwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjgxNS1cbm1tL2RhbW9uL2NvcmUuYzoyODE2Olx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI4MTctXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIGBkYW1vc19hcHBseV90YXJnZXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkYW1vc19hcHBseV90YXJnZXRgLiBMZXQmIzM5O3Mgc2VlLi4uIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgd2hlcmUgYGRhbW9zX2FwcGx5X3RhcmdldGAgaXMgaW52b2tlZCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbG93IG9mIGRhdGEsIGFuZCBwaW5wb2ludCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBJREUgb3IgY29kZSBzZWFyY2ggdG9vbHMgY2FuIHR1cm4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX2FwcGx5X3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3OTAtLypcbm1tL2RhbW9uL2NvcmUuYzoyNzkxOiAqIGRhbW9zX2FwcGx5X3RhcmdldCgpIC0gQXBwbHkgREFNT1Mgc2NoZW1lcyB0byBhIGdpdmVuIHRhcmdldC5cbm1tL2RhbW9uL2NvcmUuYy0yNzkyLSAqIEBjOlx0XHRcdG1vbml0b3JpbmcgY29udGV4dCB0byBhcHBseSBpdHMgREFNT1Mgc2NoZW1lcyB0by4uXG4tLVxubW0vZGFtb24vY29yZS5jLTI4MDctICovXG5tbS9kYW1vbi9jb3JlLmM6MjgwODpzdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0yODA5LVx0XHR1bnNpZ25lZCBsb25nIG1heF9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTMzNzA9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzOTYtXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MzM5NzpcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xubW0vZGFtb24vY29yZS5jLTMzOTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBEQU1PTiBjb2RlLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgd2hlcmUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGxpdmVzIC0gYWggeWVzLCBgbW0vZGFtb24vY29yZS5jYC4gR29vZC4gTm93LCBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggaWYgaXQmIzM5O3Mgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgaXQmIzM5O3MgYSBgc3RhdGljIGJvb2xgLiBBbHJpZ2h0LCBzbyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGF0IGZpbGUuIFRoYXQmIzM5O3MgZ29vZCBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGlubGluZWQuIElmIGl0ICppc24mIzM5O3QqLCBwZXJoYXBzIGBkYW1vbl9kb19hcHBseV9zY2hlbWVzYCwgYGRhbW9zX2FwcGx5X3RhcmdldGAsIG9yIGV2ZW4gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2Agd291bGQgYmUgYmV0dGVyIGNhbmRpZGF0ZXMgdG8gc2VydmUgYXMgRm9jdXNTeW1ib2xzLCBnaXZlbiBteSBuZWVkcy4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBjb25zaWRlcmluZyB0aGUgbGF0dGVyIGdpdmVuIG15IGV4cGVydGlzZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGV4YW1pbmUgdGhlbS4KClNvLCBsZXQmIzM5O3MgZm9jdXMgb24gYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AgYW5kIHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBtbS9kYW1vbi9jb3JlLmNgIGFuZCB6ZXJvIGluIG9uIHRob3NlIGFyZWFzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgREFNT04gYXBwbGllcyB0aGUgc2NoZW1lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNzA6XHRzdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbjMzNzE6XHR7XG4zMzcyOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzM3MzpcdFx0c3RydWN0IGRhbW9zICpzO1xuMzM3NDpcdFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xuMzM3NTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xuMzM3NjpcdFxuMzM3NzpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjMzNzg6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzM3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMzM4MDpcdFxuMzM4MTpcdFx0XHRpZiAoIXMtXHUwMDNld21hcmtzLmFjdGl2YXRlZClcbjMzODI6XHRcdFx0XHRjb250aW51ZTtcbjMzODM6XHRcbjMzODQ6XHRcdFx0aGFzX3NjaGVtZXNfdG9fYXBwbHkgPSB0cnVlO1xuMzM4NTpcdFxuMzM4NjpcdFx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG4zMzg3Olx0XHR9XG4zMzg4Olx0XG4zMzg5Olx0XHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxuMzM5MDpcdFx0XHRyZXR1cm47XG4zMzkxOlx0XG4zMzkyOlx0XHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xuMzM5MzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjMzOTQ6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4zMzk1Olx0XHRcdGlmIChjLVx1MDAzZW9wcy50YXJnZXRfdmFsaWQgXHUwMDI2XHUwMDI2IGMtXHUwMDNlb3BzLnRhcmdldF92YWxpZCh0KSA9PSBmYWxzZSlcbjMzOTY6XHRcdFx0XHRjb250aW51ZTtcbjMzOTc6XHRcdFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xuMzM5ODpcdFx0fVxuMzM5OTpcdFxuMzQwMDpcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcbjM0MDE6XHRcdFx0aWYgKHRpbWVfYmVmb3JlKGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIHMtXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxuMzQwMjpcdFx0XHRcdGNvbnRpbnVlO1xuMzQwMzpcdFx0XHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xuMzQwNDpcdFx0XHRkYW1vc19zZXRfbmV4dF9hcHBseV9zaXMocywgYyk7XG4zNDA1Olx0XHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbjM0MDY6XHRcdFx0ZGFtb3NfdHJhY2Vfc3RhdChjLCBzKTtcbjM0MDc6XHRcdH1cbjM0MDg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjLVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbjM0MDk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTk1CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDU4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoaXMgREFNT04gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGdvIG92ZXIgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBEQU1PTiBrZXJuZWwgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBpbnN0aW5jdHMgYWJvdXQgdGhlIGtleSBzeW1ib2xzIGFyZSBjb3JyZWN0LiBZZXMsIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZm9jdXMgc3ltYm9sLCBhcyBhcmUgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgZnVuY3Rpb24uIEEgcXVpY2sgYGdpdCBkaWZmYCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgaW5kZWVkIGxpbWl0ZWQgdG8gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBHb29kLCBnb29kLiBObyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciBvdGhlciBtb2RpZmllZCBjb2RlLgoKTmV4dCwgdGhlIGNvbmZpZ3MuIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gTm90aGluZyB1bnVzdWFsIHRoZXJlLiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gREFNT04gaXRzZWxmIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55dGhpbmcgZXhvdGljLiBEQU1PTl9TWVNGUyBqdXN0IGRlcGVuZHMgb24gREFNT04gYW5kIFNZU0ZTLiBEQU1PTl9WQUREUiBhbmQgREFNT05fUEFERFIgYWxzbyBkZXBlbmQgb24gREFNT04gYW5kIE1NVSwgYW5kIHNlbGVjdHMgUEFHRV9JRExFX0ZMQUcuIFN0YW5kYXJkIHN0dWZmLgoKRmluYWxseSwgbGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBndWlkZWxpbmVzIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIFRoZSBndWlkZWxpbmVzIGluZGljYXRlICYjMzQ7V29ydGhGdXp6aW5nOiB0cnVlJiMzNDsgd2l0aCBhIGNvbmNpc2UgZXhwbGFuYXRpb246ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBEQU1PUyBxdW90YSBza2lwIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgLCBjaGFuZ2luZyBob3cgY2hhcmdlZCByZWdpb25zIGFuZCB0aGUgbGFzdCByZWdpb24gb2YgYSB0YXJnZXQgYXJlIGhhbmRsZWQgZHVyaW5nIHNjaGVtZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgdmlhIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UuJiMzNDsgT2theSwgYW5kIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGFuZCAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OyBhcmUgYWxsIGluIG9yZGVyLgoKQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoIHNlZW1zIHNvdW5kIGFuZCB3ZWxsLXNjb3BlZC4gSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24mIzM0OywKICAgICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV90YXJnZXQmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uJiMzNDssCiAgICAmIzM0O2RhbW9uX2RvX2FwcGx5X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfYXBwbHlfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2Y0NmRlZGU5YTg2YzI0NDFiYzY2ZjQ1MGM2OWM4MjJiYTA5Njc1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MDU6MDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uODlkMWM3NzQxNzQ1MCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMjQ1MiwzNiAmIzQzOzI0NTIsMzkgQEAgc3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogewogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwogCXVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDsKJiM0MzsJYm9vbCBza2lwID0gZmFsc2U7CiAKIAkvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovCiAJaWYgKHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb20pIHsKIAkJaWYgKHQgIT0gcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSkKIAkJCXJldHVybiB0cnVlOwotCQlpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkgewotCQkJcXVvdGEtJmd0O2NoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7Ci0JCQlxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSA9IDA7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQogCQlpZiAocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gJmFtcDsmYW1wOwotCQkJCXItJmd0O2FyLmVuZCAmbHQ7PSBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbSkKLQkJCXJldHVybiB0cnVlOwomIzQzOwkJCQlyLSZndDthci5lbmQgJmx0Oz0gcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pIHsKJiM0MzsJCQlza2lwID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJCX0KIAogCQlpZiAocXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gJmFtcDsmYW1wOyByLSZndDthci5zdGFydCAmbHQ7CiAJCQkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20pIHsKIAkJCXN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLSZndDtjaGFyZ2VfYWRkcl9mcm9tIC0KIAkJCQkJci0mZ3Q7YXIuc3RhcnQsIG1pbl9yZWdpb25fc3opOwogCQkJaWYgKCFzel90b19za2lwKSB7Ci0JCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KQotCQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJaWYgKGRhbW9uX3N6X3JlZ2lvbihyKSAmbHQ7PSBtaW5fcmVnaW9uX3N6KSB7CiYjNDM7CQkJCQlza2lwID0gdHJ1ZTsKJiM0MzsJCQkJCWdvdG8gb3V0OwomIzQzOwkJCQl9CiAJCQkJc3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7CiAJCQl9CiAJCQlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQlza2lwID0gdHJ1ZTsKIAkJfQomIzQzOwl9CiYjNDM7b3V0OgomIzQzOwlpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkgewogCQlxdW90YS0mZ3Q7Y2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDsKIAkJcXVvdGEtJmd0O2NoYXJnZV9hZGRyX2Zyb20gPSAwOwogCX0KLQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBza2lwOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb3JlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgbGluZSAyNDUwIGluIHRoYXQgY29yZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyb2R1Y2VkIG1vZGlmaWNhdGlvbnMuIEl0JiMzOTtzIGNydWNpYWwgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIGNoYW5nZSBhdCB0aGF0IHNwZWNpZmljIGxvY2F0aW9uLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiB3b3JraW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgZGFtb25gIGlzIGNvbXBsZXggZW5vdWdoIHRoYXQgYSBwcmVjaXNlIHZpZXcgb2Ygc3Vycm91bmRpbmcgbGluZXMgaXMgZXNzZW50aWFsIGJlZm9yZSBJIGV2ZW4gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDQwOlx0ICogdGhpcyBmdW5jdGlvbiBzcGxpdHMgdGhlIHJlZ2lvbiBpbnRvIHR3byBzbyB0aGF0IHRoZSBzZWNvbmQgb25lIGNvdmVycyB0aGVcbjI0NDE6XHQgKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxuMjQ0MjpcdCAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXG4yNDQzOlx0ICogTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhlIGNhbGxlciBzaG91bGQgdXNlIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbigpIGluc3RlYWRcbjI0NDQ6XHQgKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxuMjQ0NTpcdCAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxuMjQ0NjpcdCAqXG4yNDQ3Olx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cbjI0NDg6XHQgKi9cbjI0NDk6XHRzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNDUwOlx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbjI0NTE6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjQ1MjpcdHtcbjI0NTM6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjQ1NDpcdFx0dW5zaWduZWQgbG9uZyBzel90b19za2lwO1xuMjQ1NTpcdFx0Ym9vbCBza2lwID0gZmFsc2U7XG4yNDU2Olx0XG4yNDU3Olx0XHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXG4yNDU4Olx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKSB7XG4yNDU5Olx0XHRcdGlmICh0ICE9IHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcbjI0NjA6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI0NjE6XHRcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4yNDYyOlx0XHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbjI0NjM6XHRcdFx0XHRza2lwID0gdHJ1ZTtcbjI0NjQ6XHRcdFx0XHRnb3RvIG91dDtcbjI0NjU6XHRcdFx0fVxuMjQ2NjpcdFxuMjQ2NzpcdFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbjI0Njg6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbjI0Njk6XHRcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbjI0NzA6XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4yNDcxOlx0XHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4yNDcyOlx0XHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuMjQ3MzpcdFx0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbjI0NzQ6XHRcdFx0XHRcdFx0Z290byBvdXQ7XG4yNDc1Olx0XHRcdFx0XHR9XG4yNDc2Olx0XHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbjI0Nzc6XHRcdFx0XHR9XG4yNDc4Olx0XHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuMjQ3OTpcdFx0XHRcdHNraXAgPSB0cnVlO1xuMjQ4MDpcdFx0XHR9XG4yNDgxOlx0XHR9XG4yNDgyOlx0b3V0OlxuMjQ4MzpcdFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbjI0ODQ6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjI0ODU6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4yNDg2Olx0XHR9XG4yNDg3Olx0XHRyZXR1cm4gc2tpcDtcbjI0ODg6XHR9XG4yNDg5Olx0XG4yNDkwOlx0c3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLFxuMjQ5MTpcdFx0XHR1bnNpZ25lZCBsb25nIHN6X3RyaWVkLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQsXG4yNDkyOlx0XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpXG4yNDkzOlx0e1xuMjQ5NDpcdFx0cy1cdTAwM2VzdGF0Lm5yX3RyaWVkJiM0MzsmIzQzOztcbjI0OTU6XHRcdHMtXHUwMDNlc3RhdC5zel90cmllZCAmIzQzOz0gc3pfdHJpZWQ7XG4yNDk2Olx0XHRpZiAoc3pfYXBwbGllZClcbjI0OTc6XHRcdFx0cy1cdTAwM2VzdGF0Lm5yX2FwcGxpZWQmIzQzOyYjNDM7O1xuMjQ5ODpcdFx0cy1cdTAwM2VzdGF0LnN6X2FwcGxpZWQgJiM0Mzs9IHN6X2FwcGxpZWQ7XG4yNDk5Olx0XHRzLVx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgJiM0Mzs9IHN6X29wc19maWx0ZXJfcGFzc2VkO1xuMjUwMDpcdH1cbjI1MDE6XHRcbjI1MDI6XHRzdGF0aWMgYm9vbCBkYW1vc19maWx0ZXJfbWF0Y2goc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuMjUwMzpcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXG4yNTA0Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI1MDU6XHR7XG4yNTA2Olx0XHRib29sIG1hdGNoZWQgPSBmYWxzZTtcbjI1MDc6XHRcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xuMjUwODpcdFx0aW50IHRhcmdldF9pZHggPSAwO1xuMjUwOTpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODI5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAsIGFuZCB0aGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgaXRzIGV4ZWN1dGlvbiBwYXRoLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBjb250ZXh0LCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBhc3Nlc3MgaXRzIHB1cnBvc2UgaW4gdGhlIGJyb2FkZXIgc2NoZW1lIG9mIHRoaW5ncy4gVW5kZXJzdGFuZGluZyBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIGlzIGtleSB0byBkZXRlcm1pbmluZyBpdHMgaW1wYWN0IGFuZCB3aHkgd2UmIzM5O3JlIHVzaW5nIGl0IGluIHRoaXMgc3BlY2lmaWMgbG9jYXRpb24uIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyBpdHMgJiMzNDticmVhZGNydW1iIHRyYWlsJiMzNDsgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYWxnb3JpdGhtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yNDEzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDI0LS8qXG5tbS9kYW1vbi9jb3JlLmM6MjQyNTogKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2Zcbm1tL2RhbW9uL2NvcmUuYy0yNDI2LSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNDQ4LSAqL1xubW0vZGFtb24vY29yZS5jOjI0NDk6c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxubW0vZGFtb24vY29yZS5jLTI0NTAtXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mjc1Nj1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI3NzQtXG5tbS9kYW1vbi9jb3JlLmM6Mjc3NTpcdFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbm1tL2RhbW9uL2NvcmUuYy0yNzc2LVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQ2CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDk2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9OIFF1b3RhIExvZ2ljIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGNvbW1pdC4gSXQgYXBwZWFycyB0byBiZSBhIGZpeCBpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIHF1b3RhIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBmbGF3IHdoZXJlIGl0IHVuY29uZGl0aW9uYWxseSBza2lwcGVkIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldCBpZiBpdCByZWFjaGVkIHRoYXQgcG9pbnQsIGV2ZW4gaWYgdGhlIHJlZ2lvbiB3YXMgKm5vdCogZnVsbHkgb3IgZXZlbiBwYXJ0aWFsbHkgY2hhcmdlZC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJ1Zy4KClRoZSBwYXRjaCBjb3JyZWN0cyB0aGlzIGJ5IGludHJvZHVjaW5nIGEgYHNraXBgIGJvb2xlYW4sIGRlZmVycmluZyB0aGUgc2tpcCBkZWNpc2lvbiBvbiB0aGUgbGFzdCByZWdpb24gdW50aWwgYSBwcm9wZXIgY2hlY2suIEl0IHZlcmlmaWVzIGlmIHNraXBwaW5nIGlzIGFwcHJvcHJpYXRlIGJhc2VkIG9uIGBxdW90YS0mZ3Q7Y2hhcmdlX2FkZHJfZnJvbWAgYW5kIHBvdGVudGlhbGx5IHNwbGl0cyB0aGUgcmVnaW9uLiBUaGUgY3JpdGljYWwgY2hhbmdlIGlzIHRoYXQgaXQgbm93ICpjb25kaXRpb25hbGx5KiByZXNldHMgYHF1b3RhLSZndDtjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgb25seSAqYWZ0ZXIqIHRoZSBza2lwIGRlY2lzaW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIGFuZCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC4KCk5vdywgcmVnYXJkaW5nIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplciksIHdlIG5lZWQgdG8gYXNzZXNzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBnb2luZyB0byBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEsIGxvb2tpbmcgZm9yIHRoZSBwb3RlbnRpYWw6CjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm90IGFwcGxpY2FibGUgaGVyZSwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogVGhlIGBza2lwYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gYHN6X3RvX3NraXBgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFN0cnVjdHVyZXMgYHRgLCBgcmAsIGBzYCwgYW5kIGBxdW90YWAgYXJlIGV4aXN0aW5nIGhlYXAvaW50ZXJuYWwgREFNT04gc3RydWN0dXJlcyBhbmQgdXNlZCBhcHByb3ByaWF0ZWx5LiBTbywgbm8gaXNzdWVzIHRoZXJlLgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkIGluIHRoaXMgcGF0Y2g7IHdlIGFyZSBtZXJlbHkgbW9kaWZ5aW5nIGV4aXN0aW5nIGxvZ2ljLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIFRoZXJlJiMzOTtzIG5vIG1vZGlmaWNhdGlvbiBvZiBib3VuZHMgY2hlY2tzIG9yIGFueSBjaGFuZ2UgdGhhdCB3b3VsZCBleHBvc2UgZXhpc3RpbmcgYnVmZmVycyBpbiB0aGlzIGNvZGUuCgpJJiMzOTttIGNvbmZpZGVudCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHZhcmlhYmxlcyBhcmUgYWxsIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcsIGluaXRpYWxpemVkIERBTU9OIHN0cnVjdHVyZXMuIFRoaXMgY2hhbmdlIGFkZHJlc3NlcyBhIGNvbnRyb2wtZmxvdyBpc3N1ZSByYXRoZXIgdGhhbiBhIG1lbW9yeS1yZWxhdGVkIG9uZS4KCkZ1cnRoZXJtb3JlLCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGRpZmZlcmVuY2VzIGluIEtBU0FOIGFuZCBLTVNBTi4gVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IHRvdWNoZXMgdGhlIGNvbnRyb2wgZmxvdyB3aXRoaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gLiBJdCBmaXhlcyB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIHdoZW4gdG8gc2tpcCBhIGNoYXJnZWQgcmVnaW9uIGFuZCBjb3JyZWN0bHkgcmVzZXRzIHF1b3RhIHBvaW50ZXJzIGF0IHRoZSBlbmQuIEFsbCB2YXJpYWJsZXMgdXNlZCBsb2NhbGx5IGFyZSBpbml0aWFsaXplZC4gVGhlcmUmIzM5O3Mgbm8gbWVtb3J5IGFsbG9jYXRpb24sIG5vIHN0YWNrL2hlYXAgdW5pbml0aWFsaXplZCByZWFkIG9wZXJhdGlvbnMsIGFuZCBubyB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKHJlZ2lvbiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIG90aGVyIGV4aXN0aW5nIG1lbW9yeSBzYWZldHkgbWVjaGFuaXNtcy4gVGhlcmUgYXJlIG5vIGRpcmVjdCBLTVNBTiByaXNrcyBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRvIGZpeCByZWdpb24gc2tpcHBpbmcgYW5kIHF1b3RhIHRyYWNraW5nIG9uIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIERBTU9OIHRhcmdldC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgc2tpcGApIGFuZCBzdHJ1Y3QgbWVtYmVycyBhY2Nlc3NlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGJyYW5jaGluZywgYW5kIG5vIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBmaXggcmVnaW9uIHNraXBwaW5nIGFuZCBxdW90YSB0cmFja2luZyBvbiB0aGUgbGFzdCByZWdpb24gb2YgYSBEQU1PTiB0YXJnZXQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNraXBgKSBhbmQgc3RydWN0IG1lbWJlcnMgYWNjZXNzZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBicmFuY2hpbmcsIGFuZCBubyBhbGxvY2F0aW9ucyBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjAwLjczNjE3NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYzNTU0OTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25cIixcbiAgICBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgICBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDAuNzM2MTgyNDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzMwNzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCBjZThjNmY5OTEwNmVkLi44OWQxYzc3NDE3NDUwIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yNDUyLDM2ICsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuK1xcdGJvb2wgc2tpcCA9IGZhbHNlO1xcbiBcXG4gXFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbiBcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbiBcXHRcXHRpZiAodCAhPSBxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4tXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuLVxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdH1cXG4gXFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCBcXHUwMDNjPSBxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdFxcdFxcdHItXFx1MDAzZWFyLmVuZCBcXHUwMDNjPSBxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbitcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxuIFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XFxuIFxcdFxcdFxcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cXG4gXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbiBcXHRcXHRcXHRpZiAoIXN6X3RvX3NraXApIHtcXG4tXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XFxuK1xcdFxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbitcXHR9XFxuK291dDpcXG4rXFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4gXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XFxuIFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4gXFx0fVxcbi1cXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiBza2lwO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjAxLjE2NDI3MDk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ3NTA4NTQ3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gICAgXCJkYW1vbl9kb19hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZjQ2ZGVkZTlhODZjMjQ0MWJjNjZmNDUwYzY5YzgyMmJhMDk2NzVhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzowNTowMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uODlkMWM3NzQxNzQ1MCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjQ1MiwzNiArMjQ1MiwzOSBAQCBzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4ge1xuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4gXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XG4rXHRib29sIHNraXAgPSBmYWxzZTtcbiBcbiBcdC8qIFNraXAgcHJldmlvdXNseSBjaGFyZ2VkIHJlZ2lvbnMgKi9cbiBcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcbiBcdFx0aWYgKHQgIT0gcXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tKVxuIFx0XHRcdHJldHVybiB0cnVlO1xuLVx0XHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuLVx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IE5VTEw7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdH1cbiBcdFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHRyLVx1MDAzZWFyLmVuZCBcdTAwM2M9IHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbitcdFx0XHRza2lwID0gdHJ1ZTtcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuIFxuIFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjYgci1cdTAwM2Vhci5zdGFydCBcdTAwM2NcbiBcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcbiBcdFx0XHRzel90b19za2lwID0gQUxJR05fRE9XTihxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cbiBcdFx0XHRcdFx0ci1cdTAwM2Vhci5zdGFydCwgbWluX3JlZ2lvbl9zeik7XG4gXHRcdFx0aWYgKCFzel90b19za2lwKSB7XG4tXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeilcbi1cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0XHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gbWluX3JlZ2lvbl9zeikge1xuK1x0XHRcdFx0XHRza2lwID0gdHJ1ZTtcbitcdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcbiBcdFx0XHR9XG4gXHRcdFx0ZGFtb25fc3BsaXRfcmVnaW9uX2F0KHQsIHIsIHN6X3RvX3NraXApO1xuLVx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdHNraXAgPSB0cnVlO1xuIFx0XHR9XG4rXHR9XG4rb3V0OlxuK1x0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbiBcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSA9IDA7XG4gXHR9XG4tXHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gc2tpcDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb3NfdXBkYXRlX3N0YXQoc3RydWN0IGRhbW9zICpzLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDEuMTY0MjcyMjkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njc0ODY2NjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggaXMgdHVja2VkIGF3YXkgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRpbWUgdG8gZ2V0IHRoZSBtYWduaWZ5aW5nIGdsYXNzIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIE15IGluaXRpYWwgc2NhbiB3aWxsIGJlIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsIG9mIGNvdXJzZSwgYnV0IGl0J3Mgbm90IGp1c3QgYWJvdXQgdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgY2hlY2sgdGhlIHJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zIC0gYXJlIGFueSBuZXcgZmVhdHVyZXMgZXhwb3NlZD8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIGxpa2Ugb3RoZXIga2VybmVsIHN1YnN5c3RlbXM/IEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzZXR0aW5ncy5cblxuVGhlbiBpdCdzIG9udG8gdGhlIGNhbGxlcnMuIFdobydzIHVzaW5nIHRoaXMgY29kZT8gV2hhdCdzIHRoZSBlbnRyeSBwb2ludD8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgY2hhbmdlcyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGhzIG9mIGV4ZWN1dGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eS4gVGltZSB0byB3aGlwIG91dCBteSBncmVwcGVyIGFuZCByZWFkLWZpbGUgdG9vbHMuIEkgd2FudCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zLCBmdW5jdGlvbiBjYWxscywgYW5kIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGluZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gSSdtIGxvb2tpbmcgZm9yIGJvdGggdGhlIGltbWVkaWF0ZSBjaGFuZ2VzIGFuZCBhbnkgcmlwcGxlIGVmZmVjdHMgdGhyb3VnaG91dCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGlzIGluaXRpYWwgcGhhc2Ugb2YgaW52ZXN0aWdhdGlvbiB3aWxsIGZvcm0gdGhlIGZvdW5kYXRpb24gZm9yIGEgbXVjaCBkZWVwZXIgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI3NywiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDcuOTEyOTQxNzMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDQwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDQwOlxcdCAqIHRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSByZWdpb24gaW50byB0d28gc28gdGhhdCB0aGUgc2Vjb25kIG9uZSBjb3ZlcnMgdGhlXFxuMjQ0MTpcXHQgKiBhcmVhIHRoYXQgbm90IGNoYXJnZWQgaW4gdGhlIHByZXZpb3VzIGNoYXJnZSB3aWRub3csIGFuZCByZXR1cm4gdHJ1ZS4gIFRoZVxcbjI0NDI6XFx0ICogY2FsbGVyIGNhbiBzZWUgdGhlIHNlY29uZCBvbmUgb24gdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSByZWdpb24gd2Fsay5cXG4yNDQzOlxcdCAqIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoZSBjYWxsZXIgc2hvdWxkIHVzZSBkYW1vbl9mb3JfZWFjaF9yZWdpb24oKSBpbnN0ZWFkXFxuMjQ0NDpcXHQgKiBvZiBkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZSgpLiAgSWYgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKSBpcyB1c2VkLFxcbjI0NDU6XFx0ICogdGhlIHNlY29uZCByZWdpb24gd2lsbCBqdXN0IGJlIGlnbm9yZWQuXFxuMjQ0NjpcXHQgKlxcbjI0NDc6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHRoZSByZWdpb24gc2hvdWxkIGJlIHNraXBwZWQsIGZhbHNlIG90aGVyd2lzZS5cXG4yNDQ4OlxcdCAqL1xcbjI0NDk6XFx0c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI0NTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbjI0NTE6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbjI0NTI6XFx0e1xcbjI0NTM6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNDU0OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcXG4yNDU1OlxcdFxcdGJvb2wgc2tpcCA9IGZhbHNlO1xcbjI0NTY6XFx0XFxuMjQ1NzpcXHRcXHQvKiBTa2lwIHByZXZpb3VzbHkgY2hhcmdlZCByZWdpb25zICovXFxuMjQ1ODpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xcbjI0NTk6XFx0XFx0XFx0aWYgKHQgIT0gcXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSlcXG4yNDYwOlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI0NjE6XFx0XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFxcdTAwMjZcXHUwMDI2XFxuMjQ2MjpcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQgXFx1MDAzYz0gcXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG4yNDYzOlxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0NjQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ2NTpcXHRcXHRcXHR9XFxuMjQ2NjpcXHRcXG4yNDY3OlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNiByLVxcdTAwM2Vhci5zdGFydCBcXHUwMDNjXFxuMjQ2ODpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xcbjI0Njk6XFx0XFx0XFx0XFx0c3pfdG9fc2tpcCA9IEFMSUdOX0RPV04ocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxcbjI0NzA6XFx0XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuc3RhcnQsIG1pbl9yZWdpb25fc3opO1xcbjI0NzE6XFx0XFx0XFx0XFx0aWYgKCFzel90b19za2lwKSB7XFxuMjQ3MjpcXHRcXHRcXHRcXHRcXHRpZiAoZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IG1pbl9yZWdpb25fc3opIHtcXG4yNDczOlxcdFxcdFxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0NzQ6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQ3NTpcXHRcXHRcXHRcXHRcXHR9XFxuMjQ3NjpcXHRcXHRcXHRcXHRcXHRzel90b19za2lwID0gbWluX3JlZ2lvbl9zejtcXG4yNDc3OlxcdFxcdFxcdFxcdH1cXG4yNDc4OlxcdFxcdFxcdFxcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCBzel90b19za2lwKTtcXG4yNDc5OlxcdFxcdFxcdFxcdHNraXAgPSB0cnVlO1xcbjI0ODA6XFx0XFx0XFx0fVxcbjI0ODE6XFx0XFx0fVxcbjI0ODI6XFx0b3V0OlxcbjI0ODM6XFx0XFx0aWYgKHIgPT0gZGFtb25fbGFzdF9yZWdpb24odCkpIHtcXG4yNDg0OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjI0ODU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gPSAwO1xcbjI0ODY6XFx0XFx0fVxcbjI0ODc6XFx0XFx0cmV0dXJuIHNraXA7XFxuMjQ4ODpcXHR9XFxuMjQ4OTpcXHRcXG4yNDkwOlxcdHN0YXRpYyB2b2lkIGRhbW9zX3VwZGF0ZV9zdGF0KHN0cnVjdCBkYW1vcyAqcyxcXG4yNDkxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfdHJpZWQsIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCxcXG4yNDkyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQpXFxuMjQ5MzpcXHR7XFxuMjQ5NDpcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX3RyaWVkKys7XFxuMjQ5NTpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X3RyaWVkICs9IHN6X3RyaWVkO1xcbjI0OTY6XFx0XFx0aWYgKHN6X2FwcGxpZWQpXFxuMjQ5NzpcXHRcXHRcXHRzLVxcdTAwM2VzdGF0Lm5yX2FwcGxpZWQrKztcXG4yNDk4OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfYXBwbGllZCArPSBzel9hcHBsaWVkO1xcbjI0OTk6XFx0XFx0cy1cXHUwMDNlc3RhdC5zel9vcHNfZmlsdGVyX3Bhc3NlZCArPSBzel9vcHNfZmlsdGVyX3Bhc3NlZDtcXG4yNTAwOlxcdH1cXG4yNTAxOlxcdFxcbjI1MDI6XFx0c3RhdGljIGJvb2wgZGFtb3NfZmlsdGVyX21hdGNoKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNTAzOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcixcXG4yNTA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNTA1OlxcdHtcXG4yNTA2OlxcdFxcdGJvb2wgbWF0Y2hlZCA9IGZhbHNlO1xcbjI1MDc6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGk7XFxuMjUwODpcXHRcXHRpbnQgdGFyZ2V0X2lkeCA9IDA7XFxuMjUwOTpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjA3LjkxMzE1MjI3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcwNzA1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZzo2OlxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnOjE2OlxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctMTgtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTk6XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxubW0vZGFtb24vS2NvbmZpZzoyMDpcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbm1tL2RhbW9uL0tjb25maWctMjEtXFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Mjg6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy0yOS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctMzAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MzE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG5tbS9kYW1vbi9LY29uZmlnLTMyLVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDA6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTQxLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NDI6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNDMtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy00NS1cXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9kYW1vbi9LY29uZmlnLTUwLVxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbm1tL2RhbW9uL0tjb25maWc6NTE6XFx0ZGVmYXVsdCBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNTItXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NTM6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy01NC1cXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWc6NTc6XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6NTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy01OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctNjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6NjE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbm1tL2RhbW9uL0tjb25maWctNjItXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo2OTpcXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IFNZU0ZTXFxubW0vZGFtb24vS2NvbmZpZzo3MTpcXHRkZWZhdWx0IERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy03Mi1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo3MzpcXHQgIFRoaXMgYnVpbGRzIHRoZSBzeXNmcyBpbnRlcmZhY2UgZm9yIERBTU9OLiAgVGhlIHVzZXIgc3BhY2UgY2FuIHVzZVxcbm1tL2RhbW9uL0tjb25maWctNzQtXFx0ICB0aGUgaW50ZXJmYWNlIGZvciBhcmJpdHJhcnkgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWc6Nzg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TWVNGUyBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxubW0vZGFtb24vS2NvbmZpZy03OS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbm1tL2RhbW9uL0tjb25maWctODAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6ODE6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlIEt1bml0IHRlc3Qgc3VpdGUuXFxubW0vZGFtb24vS2NvbmZpZy04Mi1cXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWc6ODk6XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxubW0vZGFtb24vS2NvbmZpZzo5MDpcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy05MS1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzo5MjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbm1tL2RhbW9uL0tjb25maWc6OTM6XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxubW0vZGFtb24vS2NvbmZpZy05NC1cXHQgIHRob3NlLlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnOjEwMTpcXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbm1tL2RhbW9uL0tjb25maWc6MTAyOlxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTEwMy1cXHRoZWxwXFxubW0vZGFtb24vS2NvbmZpZzoxMDQ6XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgc3Vic3lzdGVtLiAgSXQgdHJpZXMgdG9cXG5tbS9kYW1vbi9LY29uZmlnLTEwNS1cXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWc6MTA5OlxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTA6XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctMTExLVxcdGhlbHBcXG5tbS9kYW1vbi9LY29uZmlnOjExMjpcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0aXN0aWNzIHN1YnN5c3RlbS5cXG5tbS9kYW1vbi9LY29uZmlnOjExMzpcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxubW0vZGFtb24vS2NvbmZpZy0xMTQtXFx0ICBtZXRyaWNzLlxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWc6MTE3OlxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxubW0vZGFtb24vS2NvbmZpZzoxMTg6XFx0ZGVwZW5kcyBvbiBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZzoxMTk6XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMjAtXFx0aGVscFxcbm1tL2RhbW9uL0tjb25maWc6MTIxOlxcdCAgV2hldGhlciB0byBlbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0LiAgVXNlcnMgY2FuIGRpc2FibGUgaXQgaW5cXG5tbS9kYW1vbi9LY29uZmlnLTEyMi1cXHQgIGJvb3Qgb3IgcnVudGltZSB1c2luZyBpdHMgJ2VuYWJsZWQnIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MDcuOTU5ODY1NDc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyNjc3Mzc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIHRoaW5raW5nIGxpa2UgYSBkZXZlbG9wZXIgaW52ZXN0aWdhdGluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBDYWxscyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb24gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBUbyB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLiBJIG5lZWQgdG8gc2VlICp3aGVyZSogaXQncyBiZWluZyBpbnZva2VkIOKAkyB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlYmFzZSBhcmUgdXNpbmcgaXQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgaHVnZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvbGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIHBsYXlzLiBJcyBpdCBwYXJ0IG9mIGEgY3JpdGljYWwgcGF0aCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBhbmQgaG93IGl0IHNob3VsZCBiZWhhdmUsIHdoaWNoIGlzIGVzc2VudGlhbCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdXNlZCBpbmNvcnJlY3RseS4gSSBuZWVkIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgYW5kIHJldmlldyB0aGUgb3RoZXIgY2FsbGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjA5Ljk4NjY0MTg1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3MTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MjQxMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNDI0LS8qXFxubW0vZGFtb24vY29yZS5jOjI0MjU6ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXFxubW0vZGFtb24vY29yZS5jLTI0MjYtICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQ0OC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjQ0OTpzdGF0aWMgYm9vbCBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxubW0vZGFtb24vY29yZS5jLTI0NTAtXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NzQtXFxubW0vZGFtb24vY29yZS5jOjI3NzU6XFx0XFx0aWYgKGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24odCwgciwgcywgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI3NzYtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjEwLjAzMjYxODE1OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NDQ3OTI0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgKipcblxuT2theSwgdGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLiBJJ20gZ29pbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCB0byBzZWUgaG93IERBTU9OIGFjdHVhbGx5ICphcHBsaWVzKiBpdHMgc2NoZW1lcy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgaGVhcnQgb2YgdGhlIGFjdGlvbiwgdGhlIHBvaW50IHdoZXJlIG1vbml0b3JpbmcgZGF0YSB0cmFuc2xhdGVzIGludG8gcHJhY3RpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGFkanVzdG1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHRvdWNoZXMsIGFuZCB0aGUgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgY29uY3VycmVuY3kgaXNzdWVzIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIG1vbml0b3JpbmcgYW5kIGFjdGlvbi4gTGV0J3Mgc2VlIGhvdyB3ZWxsIGl0J3MgZGVzaWduZWQgYW5kIGhvdyBpdCBhY3R1YWxseSBhcHBsaWVzIHRoZSByZXN1bHRzIG9mIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToxMS45Nzc0MTM0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc1NTpcXHRcXG4yNzU2OlxcdHN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4yNzU3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjc1ODpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbjI3NTk6XFx0e1xcbjI3NjA6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjI3NjE6XFx0XFxuMjc2MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjI3NjM6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNzY0OlxcdFxcbjI3NjU6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMjc2NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yNzY3OlxcdFxcbjI3Njg6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjI3Njk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3MDpcXHRcXG4yNzcxOlxcdFxcdFxcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xcbjI3NzI6XFx0XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3NzM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3NDpcXHRcXG4yNzc1OlxcdFxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjI3NzY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc3NzpcXHRcXG4yNzc4OlxcdFxcdFxcdGlmIChzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwMjZcXHUwMDI2XFxuMjc3OTpcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VtYXhfbnJfc25hcHNob3RzIFxcdTAwM2M9IHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKVxcbjI3ODA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjc4MTpcXHRcXG4yNzgyOlxcdFxcdFxcdGlmIChkYW1vc192YWxpZF90YXJnZXQoYywgciwgcykpXFxuMjc4MzpcXHRcXHRcXHRcXHRkYW1vc19hcHBseV9zY2hlbWUoYywgdCwgciwgcyk7XFxuMjc4NDpcXHRcXG4yNzg1OlxcdFxcdFxcdGlmIChkYW1vbl9pc19sYXN0X3JlZ2lvbihyLCB0KSlcXG4yNzg2OlxcdFxcdFxcdFxcdHMtXFx1MDAzZXN0YXQubnJfc25hcHNob3RzKys7XFxuMjc4NzpcXHRcXHR9XFxuMjc4ODpcXHR9XFxuMjc4OTpcXHRcXG4yNzkwOlxcdC8qXFxuMjc5MTpcXHQgKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxuMjc5MjpcXHQgKiBAYzpcXHRcXHRcXHRtb25pdG9yaW5nIGNvbnRleHQgdG8gYXBwbHkgaXRzIERBTU9TIHNjaGVtZXMgdG8uLlxcbjI3OTM6XFx0ICogQHQ6XFx0XFx0XFx0bW9uaXRvcmluZyB0YXJnZXQgdG8gYXBwbHkgdGhlIHNjaGVtZXMgdG8uXFxuMjc5NDpcXHQgKiBAbWF4X3JlZ2lvbl9zejpcXHRtYXhpbXVtIHJlZ2lvbiBzaXplIGZvciBAYy5cXG4yNzk1OlxcdCAqXFxuMjc5NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIHNwbGl0IHJlZ2lvbnMgZm9yIGtlZXBpbmcgdGhlIHF1b3RhLiAgVG8gbWluaW1pemVcXG4yNzk3OlxcdCAqIG92ZXJoZWFkIGZyb20gdGhlIHNwbGl0IG9wZXJhdGlvbnMgaW5jcmVhc2VkIG51bWJlciBvZiByZWdpb25zLCB0aGlzXFxuMjc5ODpcXHQgKiBmdW5jdGlvbiB3aWxsIGFsc28gbWVyZ2UgcmVnaW9ucyBhZnRlciB0aGUgc2NoZW1lcyBhcHBseWluZyBhdHRlbXB0IGlzIGRvbmUsXFxuMjc5OTpcXHQgKiBmb3IgZWFjaCByZWdpb24uICBUaGUgbWVyZ2Ugb3BlcmF0aW9uIGlzIG1hZGUgb25seSB3aGVuIGl0IGRvZXNuJ3QgbG9zZSB0aGVcXG4yODAwOlxcdCAqIG1vbml0b3JpbmcgaW5mb3JtYXRpb24gYW5kIG5vdCB2aW9sYXRpbmcgQG1heF9yZWdpb25fc3ouXFxuMjgwMTpcXHQgKlxcbjI4MDI6XFx0ICogSGVuY2UsIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lvbnMgY291bGRcXG4yODAzOlxcdCAqIGJlIGluY3JlYXNlZCBvciByZWR1Y2VkLiAgVGhlIGluY3JlYXNlIGNvdWxkIG1ha2UgbWF4X25yX3JlZ2lvbnMgdGVtcG9yYXJpbHlcXG4yODA0OlxcdCAqIGJlIHZpb2xhdGVkLCB1bnRpbCB0aGUgbmV4dCBwZXItYWdncmVnYXRpb24gaW50ZXJ2YWwgcmVnaW9ucyBtZXJnZSBvcGVyYXRpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MTEuOTc3NTk0MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3OTQwMzExNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL2RhbW9uL2NvcmUuY2AuIExvb2tpbmcgYXQgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbiwgdGhlIGNvcmUgbG9naWMgc2VlbXMgcmVsYXRlZCB0byBxdW90YSBlbmZvcmNlbWVudCB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yay4gUHJldmlvdXNseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgcmV0dXJuIHdpdGhpbiB0aGUgYGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pYCBibG9jaywgc3BlY2lmaWNhbGx5IHdoZW4gZW5jb3VudGVyaW5nIHRoZSBsYXN0IHJlZ2lvbiAoYHIgPT0gZGFtb25fbGFzdF9yZWdpb24odClgKS4gSXQgaW1tZWRpYXRlbHkgcmV0dXJuZWQgYHRydWVgIChza2lwcGluZyB0aGUgcmVnaW9uKSB3aXRob3V0IGNvbnNpZGVyaW5nIHRoZSBgcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbWAgdmFsdWUuIFRoYXQncyBhIHBvdGVudGlhbCBvdmVyc2lnaHQuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBza2lwYCB2YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSByZWdpb24gKnNob3VsZCogYmUgc2tpcHBlZCwgYW5kIHRoZW4gdGhlIGxvZ2ljIHRvIGNsZWFyIG91dCB0aGUgYHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbWAgYW5kIGBxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tYCBoYXBwZW5zIHVuY29uZGl0aW9uYWxseSBhdCB0aGUgZW5kIGlmIGl0J3MgdGhlIGxhc3QgcmVnaW9uLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXggYW5kIG1ha2VzIHRoZSBsb2dpYyBjbGVhcmVyLlxuXG5Ob3csIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBEQU1PTiBpcyBjZXJ0YWlubHkgYW4gaW50ZXJlc3RpbmcgdGFyZ2V0LiBJdCdzIGEgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhbmQgaGFzIHNldmVyYWwgdXNlci1hY2Nlc3NpYmxlIGludGVyZmFjZXMsIG5hbWVseSBzeXNmcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGBDT05GSUdfREFNT05fVkFERFJgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAgYXJlIGVuYWJsZWQuIFRoZSBmYWN0IHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFwcGVucyB2aWEgc3lzZnMgbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSBRRU1VIG9yIHNpbWlsYXIgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIGBrZGFtb25kYCBrZXJuZWwgdGhyZWFkIGV4ZWN1dGluZyB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uIGFzIHBhcnQgb2YgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBmb3IgREFNT04gc3lzZnMgYW5kIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgdG8gdmVyaWZ5IHRoZXNlIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzIxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE3LjM1Njk5OTU5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNjQ4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE3LjQwNjA2OTE0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE4ODgzMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBEQU1PTidzIENvcmUqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBidWlsZCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3IpIGZyYW1ld29yay4gVGhlIE1ha2VmaWxlIGlzIHRoZSBuYXR1cmFsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzLCBzbyBJJ2xsIGNoZWNrIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBjb3JlLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCB0aGUgd2F5IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgbm90aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uLiBJJ20gbG9va2luZyBmb3IgYW55IHVudXN1YWwgZmxhZ3MsIG9wdGltaXphdGlvbiBsZXZlbHMgdGhhdCBtaWdodCBhZmZlY3QgcHJvZmlsaW5nLCBvciBpbmNsdWRlIHBhdGhzIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBJIHdvdWxkbid0IHJlYWRpbHkgZXhwZWN0LiBFc3NlbnRpYWxseSwgSSdtIHZlcmlmeWluZyB0aGUgcmVjaXBlIGZvciBidWlsZGluZyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG1vbml0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTI1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MTkuNjI0OTU0OTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjE5LjYyNTAxODk4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU3ODA1MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipNYWtlZmlsZSBJbnZlc3RpZ2F0aW9uOiBEQU1PTiBNb2R1bGUgSW5jbHVzaW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBtbS9NYWtlZmlsZWAuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gdmVyaWZ5IGlzIHdoZXRoZXIgaXQncyBnb3QgdGhlIHN0YW5kYXJkIGhvb2sgZm9yIGNvbmRpdGlvbmFsbHkgaW5jbHVkaW5nIHRoZSBEQU1PTiBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgbGluZSBgb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9gLiBUaGlzIGlzIHRoZSB0eXBpY2FsIHdheSB3ZSBtYW5hZ2Ugd2hpY2ggbW9kdWxlcyBnZXQgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGJhc2VkIG9uIHRoZSBgQ09ORklHX0RBTU9OYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBzY2FuIHRoZSBmaWxlIGZvciB0aGF0IGxpbmUuIElmIGl0J3MgdGhlcmUsIHRoZW4gdGhlIGJ1aWxkIHN5c3RlbSBzaG91bGQgcHJvcGVybHkgaGFuZGxlIHRoZSBpbmNsdXNpb24uIElmIG5vdCwgSSd2ZSBnb3QgdG8gZmlndXJlIG91dCB3aHksIGFuZCBpZiBJIG5lZWQgdG8gbWFrZSBzb21lIG1hbnVhbCBhZGp1c3RtZW50cyBvciBpbnZlc3RpZ2F0ZSB0aGUgS2NvbmZpZyBzZXR1cCBmb3IgREFNT04uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDA4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyMS41ODI4MjY1MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMTYzNTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzY9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxubW0vTWFrZWZpbGU6MTM3Om9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxubW0vTWFrZWZpbGUtMTM4LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyMS44OTQ0NjY5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NTAxNTA3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqREFNT04gQ29uZmlndXJhdGlvbiBhbmQgQ2FsbCBQYXRocyoqXG5cbk9rYXksIHNvIGlmIEkndmUgZ290IGBDT05GSUdfREFNT049eWAsIHRoYXQgbWVhbnMgYG1tL2RhbW9uL2NvcmUub2AgaXMgYmVpbmcgYnVpbHQuIEFuZCwgYXMgZXhwZWN0ZWQsIHRvIGFjdHVhbGx5ICp1c2UqIERBTU9OIGZyb20gdXNlcnNwYWNlLCBJIG5lZWQgYENPTkZJR19EQU1PTl9TWVNGUz15YCDigJMgYW5kLCBvZiBjb3Vyc2UsIGVpdGhlciBgQ09ORklHX0RBTU9OX1BBRERSPXlgIG9yIGBDT05GSUdfREFNT05fVkFERFI9eWAsIGRlcGVuZGluZyBvbiB0aGUgYWRkcmVzcyBzcGFjZSBJJ20gd29ya2luZyB3aXRoLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEkgd2FudCB0byBzZWUgd2hlcmUgaXQncyBjYWxsZWQgZnJvbS4gTGV0IG1lIHRyYWNlIHRoZSBjYWxsZXIgaGllcmFyY2h5Li4uIGFoLCByaWdodDogYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGNhbGxlZCBieSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AsIHdoaWNoIGl0c2VsZiBpcyBpbnZva2VkIGJ5IGBkYW1vc19hcHBseV90YXJnZXRgIChvciBwb3NzaWJseSBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgbmVlZCB0byBjb25maXJtIHRoYXQpLiBPa2F5LCB0aW1lIHRvIHNlYXJjaCB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5IGZvciBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgdG8gbmFpbCBkb3duIHRoYXQgbGFzdCBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyNC40NDQ2MTk4MDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjYwNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNjg1PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3NTUtXFxubW0vZGFtb24vY29yZS5jOjI3NTY6c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbm1tL2RhbW9uL2NvcmUuYy0yNzU3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjgwOD1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODE1LVxcbm1tL2RhbW9uL2NvcmUuYzoyODE2OlxcdFxcdGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoYywgdCwgcik7XFxubW0vZGFtb24vY29yZS5jLTI4MTctXFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MjQuNDkxMjgzNjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMTkxNTgwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgT3JpZ2lucyBvZiBgZGFtb3NfYXBwbHlfdGFyZ2V0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkYW1vc19hcHBseV90YXJnZXRgLiBMZXQncyBzZWUuLi4gbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZywgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGBkYW1vc19hcHBseV90YXJnZXRgIGlzIGludm9rZWQgd2lsbCBpbW1lZGlhdGVseSBnaXZlIG1lIGNsdWVzIGFib3V0IGl0cyBwdXJwb3NlIGFuZCB0aGUgZGF0YSBpdCBvcGVyYXRlcyBvbi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGNyb3NzLXJlZmVyZW5jZXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBmbG93IG9mIGRhdGEsIGFuZCBwaW5wb2ludCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24uIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSBmdW5jdGlvbiBjYWxscy4gTGV0J3Mgc2VlIHdoYXQgdGhlIElERSBvciBjb2RlIHNlYXJjaCB0b29scyBjYW4gdHVybiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMDcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNToyNi43MTA0NDM4NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTY0NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX2FwcGx5X3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI3NTY9c3RhdGljIHZvaWQgZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3OTAtLypcXG5tbS9kYW1vbi9jb3JlLmM6Mjc5MTogKiBkYW1vc19hcHBseV90YXJnZXQoKSAtIEFwcGx5IERBTU9TIHNjaGVtZXMgdG8gYSBnaXZlbiB0YXJnZXQuXFxubW0vZGFtb24vY29yZS5jLTI3OTItICogQGM6XFx0XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0IHRvIGFwcGx5IGl0cyBEQU1PUyBzY2hlbWVzIHRvLi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yODA3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyODA4OnN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yODA5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4X3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzcwPXN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzOTYtXFx0XFx0XFx0Y29udGludWU7XFxubW0vZGFtb24vY29yZS5jOjMzOTc6XFx0XFx0ZGFtb3NfYXBwbHlfdGFyZ2V0KGMsIHQsIG1heF9yZWdpb25fc3opO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzk4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MjYuNzU3MDE0MDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ5Mzc0MTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIERBTU9OIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAgbGl2ZXMgLSBhaCB5ZXMsIGBtbS9kYW1vbi9jb3JlLmNgLiBHb29kLiBOb3csIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCdzIHN0YXRpYyBvciBleHBvcnRlZC4gQWgsIGl0J3MgYSBgc3RhdGljIGJvb2xgLiBBbHJpZ2h0LCBzbyBpdCdzIGludGVybmFsIHRvIHRoYXQgZmlsZS4gVGhhdCdzIGdvb2QgY29udGV4dC5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGlubGluZWQuIElmIGl0ICppc24ndCosIHBlcmhhcHMgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYXBwbHlfdGFyZ2V0YCwgb3IgZXZlbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCB3b3VsZCBiZSBiZXR0ZXIgY2FuZGlkYXRlcyB0byBzZXJ2ZSBhcyBGb2N1c1N5bWJvbHMsIGdpdmVuIG15IG5lZWRzLiBJJ20gbGVhbmluZyB0b3dhcmQgY29uc2lkZXJpbmcgdGhlIGxhdHRlciBnaXZlbiBteSBleHBlcnRpc2UsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBleGFtaW5lIHRoZW0uXG5cblNvLCBsZXQncyBmb2N1cyBvbiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgbW0vZGFtb24vY29yZS5jYCBhbmQgemVybyBpbiBvbiB0aG9zZSBhcmVhcy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IERBTU9OIGFwcGxpZXMgdGhlIHNjaGVtZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjMxLjI1MDc1NzkxOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzNzA6XFx0c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuMzM3MTpcXHR7XFxuMzM3MjpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMzNzM6XFx0XFx0c3RydWN0IGRhbW9zICpzO1xcbjMzNzQ6XFx0XFx0Ym9vbCBoYXNfc2NoZW1lc190b19hcHBseSA9IGZhbHNlO1xcbjMzNzU6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfcmVnaW9uX3N6O1xcbjMzNzY6XFx0XFxuMzM3NzpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgYykge1xcbjMzNzg6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGMtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBzLVxcdTAwM2VuZXh0X2FwcGx5X3NpcykpXFxuMzM3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzgwOlxcdFxcbjMzODE6XFx0XFx0XFx0aWYgKCFzLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkKVxcbjMzODI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzM4MzpcXHRcXG4zMzg0OlxcdFxcdFxcdGhhc19zY2hlbWVzX3RvX2FwcGx5ID0gdHJ1ZTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0XFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xcbjMzODc6XFx0XFx0fVxcbjMzODg6XFx0XFxuMzM4OTpcXHRcXHRpZiAoIWhhc19zY2hlbWVzX3RvX2FwcGx5KVxcbjMzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbjMzOTE6XFx0XFxuMzM5MjpcXHRcXHRtYXhfcmVnaW9uX3N6ID0gZGFtb25fcmVnaW9uX3N6X2xpbWl0KGMpO1xcbjMzOTM6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Yy1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbjMzOTQ6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG4zMzk1OlxcdFxcdFxcdGlmIChjLVxcdTAwM2VvcHMudGFyZ2V0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IGMtXFx1MDAzZW9wcy50YXJnZXRfdmFsaWQodCkgPT0gZmFsc2UpXFxuMzM5NjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4zMzk3OlxcdFxcdFxcdGRhbW9zX2FwcGx5X3RhcmdldChjLCB0LCBtYXhfcmVnaW9uX3N6KTtcXG4zMzk4OlxcdFxcdH1cXG4zMzk5OlxcdFxcbjM0MDA6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGMpIHtcXG4zNDAxOlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShjLVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscywgcy1cXHUwMDNlbmV4dF9hcHBseV9zaXMpKVxcbjM0MDI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzQwMzpcXHRcXHRcXHRkYW1vc193YWxrX2NvbXBsZXRlKGMsIHMpO1xcbjM0MDQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xcbjM0MDU6XFx0XFx0XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4zNDA2OlxcdFxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuMzQwNzpcXHRcXHR9XFxuMzQwODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmMtXFx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcXG4zNDA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzEuMjUwOTUxMTQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzMzODYzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGlzIERBTU9OIFBhdGNoKipcblxuT2theSwgbGV0J3MgZ28gb3ZlciB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIERBTU9OIGtlcm5lbCBtb2R1bGUuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGluc3RpbmN0cyBhYm91dCB0aGUga2V5IHN5bWJvbHMgYXJlIGNvcnJlY3QuIFllcywgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGlzIGRlZmluaXRlbHkgYSByZWxldmFudCBmb2N1cyBzeW1ib2wsIGFzIGFyZSBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AsIGBkYW1vc19hcHBseV90YXJnZXRgLCBhbmQgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyB0aGUgZXhwZWN0ZWQgZmlsZSBhbmQgZnVuY3Rpb24uIEEgcXVpY2sgYGdpdCBkaWZmYCBjb25maXJtcyB0aGF0IHRoZSBtb2RpZmljYXRpb24gaXMgaW5kZWVkIGxpbWl0ZWQgdG8gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25gIGZ1bmN0aW9uLiBHb29kLCBnb29kLiBObyB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvciBvdGhlciBtb2RpZmllZCBjb2RlLlxuXG5OZXh0LCB0aGUgY29uZmlncy4gSSBzZWUgdGhhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1BBRERSYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgLiBOb3RoaW5nIHVudXN1YWwgdGhlcmUuIExldCBtZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIERBTU9OIGl0c2VsZiBkb2Vzbid0IHJlcXVpcmUgYW55dGhpbmcgZXhvdGljLiBEQU1PTl9TWVNGUyBqdXN0IGRlcGVuZHMgb24gREFNT04gYW5kIFNZU0ZTLiBEQU1PTl9WQUREUiBhbmQgREFNT05fUEFERFIgYWxzbyBkZXBlbmQgb24gREFNT04gYW5kIE1NVSwgYW5kIHNlbGVjdHMgUEFHRV9JRExFX0ZMQUcuIFN0YW5kYXJkIHN0dWZmLlxuXG5GaW5hbGx5LCBsZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIGd1aWRlbGluZXMgb25lIGxhc3QgdGltZSB0byBtYWtlIHN1cmUgdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBUaGUgZ3VpZGVsaW5lcyBpbmRpY2F0ZSBcIldvcnRoRnV6emluZzogdHJ1ZVwiIHdpdGggYSBjb25jaXNlIGV4cGxhbmF0aW9uOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgREFNT1MgcXVvdGEgc2tpcCBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCwgY2hhbmdpbmcgaG93IGNoYXJnZWQgcmVnaW9ucyBhbmQgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0IGFyZSBoYW5kbGVkIGR1cmluZyBzY2hlbWUgYXBwbGljYXRpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIHZpYSB0aGUgREFNT04gc3lzZnMgaW50ZXJmYWNlLlwiIE9rYXksIGFuZCB0aGUgXCJGb2N1c1N5bWJvbHNcIiBhbmQgXCJFbmFibGVDb25maWdzXCIgYXJlIGFsbCBpbiBvcmRlci5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGlzIHBhdGNoIHNlZW1zIHNvdW5kIGFuZCB3ZWxsLXNjb3BlZC4gSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1OTUsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzUuODI0MzQwMzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3ODI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvblwiLFxuICAgIFwiZGFtb25fZG9fYXBwbHlfc2NoZW1lc1wiLFxuICAgIFwiZGFtb3NfYXBwbHlfdGFyZ2V0XCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIGluIG1tL2RhbW9uL2NvcmUuYyB0byBwcm9wZXJseSBoYW5kbGUgcXVvdGEgdHJhY2tpbmcgYW5kIHJlZ2lvbiBza2lwcGluZyB3aGVuIHJlYWNoaW5nIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIHRhcmdldC4gVGhpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aHJvdWdoIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uXCIsXG4gICAgXCJkYW1vbl9kb19hcHBseV9zY2hlbWVzXCIsXG4gICAgXCJkYW1vc19hcHBseV90YXJnZXRcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHByb3Blcmx5IGhhbmRsZSBxdW90YSB0cmFja2luZyBhbmQgcmVnaW9uIHNraXBwaW5nIHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgcmVnaW9uIG9mIGEgdGFyZ2V0LiBUaGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRocm91Z2ggdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6MzUuOTE1MTI4OTg0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1NjU4OTMzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjM1LjkxNTY5MzE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2NDU2MDIxMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKWAgaW4gYG1tL2RhbW9uL2NvcmUuY2AgdG8gZml4IHJlZ2lvbiBza2lwcGluZyBhbmQgcXVvdGEgdHJhY2tpbmcgb24gdGhlIGxhc3QgcmVnaW9uIG9mIGEgREFNT04gdGFyZ2V0LiBBbGwgbG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBza2lwYCkgYW5kIHN0cnVjdCBtZW1iZXJzIGFjY2Vzc2VkIGFyZSBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gYnJhbmNoaW5nLCBhbmQgbm8gYWxsb2NhdGlvbnMgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNmNDZkZWRlOWE4NmMyNDQxYmM2NmY0NTBjNjljODIyYmEwOTY3NWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjA1OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi44OWQxYzc3NDE3NDUwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNDUyLDM2ICsyNDUyLDM5IEBAIHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiB7XG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiBcdHVuc2lnbmVkIGxvbmcgc3pfdG9fc2tpcDtcbitcdGJvb2wgc2tpcCA9IGZhbHNlO1xuIFxuIFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSkge1xuIFx0XHRpZiAodCAhPSBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XG4tXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbi1cdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0fVxuIFx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdHItXHUwMDNlYXIuZW5kIFx1MDAzYz0gcXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuK1x0XHRcdHNraXAgPSB0cnVlO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4gXG4gXHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIFx1MDAyNlx1MDAyNiByLVx1MDAzZWFyLnN0YXJ0IFx1MDAzY1xuIFx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSkge1xuIFx0XHRcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gLVxuIFx0XHRcdFx0XHRyLVx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcbiBcdFx0XHRpZiAoIXN6X3RvX3NraXApIHtcbi1cdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KVxuLVx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocikgXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XG4rXHRcdFx0XHRcdHNraXAgPSB0cnVlO1xuK1x0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdHN6X3RvX3NraXAgPSBtaW5fcmVnaW9uX3N6O1xuIFx0XHRcdH1cbiBcdFx0XHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XG4tXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdFx0c2tpcCA9IHRydWU7XG4gXHRcdH1cbitcdH1cbitvdXQ6XG4rXHRpZiAociA9PSBkYW1vbl9sYXN0X3JlZ2lvbih0KSkge1xuIFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xuIFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcbiBcdH1cbi1cdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBza2lwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTozNS45MTU2OTQxODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc2MjY3NzM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY2hhbmdlcy4gSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBkaWZmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBsaW5lcyBhcm91bmQgbGluZSAyNDUwIGluIHRoYXQgY29yZSBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyb2R1Y2VkIG1vZGlmaWNhdGlvbnMuIEl0J3MgY3J1Y2lhbCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIGludGVudCBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgY2hhbmdlIGF0IHRoYXQgc3BlY2lmaWMgbG9jYXRpb24uIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIHdvcmtpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGBkYW1vbmAgaXMgY29tcGxleCBlbm91Z2ggdGhhdCBhIHByZWNpc2UgdmlldyBvZiBzdXJyb3VuZGluZyBsaW5lcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgZXZlbiBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhdGNoIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MDU6NDEuNjc4Mzc1NTA3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDI2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ0MDpcXHQgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgcmVnaW9uIGludG8gdHdvIHNvIHRoYXQgdGhlIHNlY29uZCBvbmUgY292ZXJzIHRoZVxcbjI0NDE6XFx0ICogYXJlYSB0aGF0IG5vdCBjaGFyZ2VkIGluIHRoZSBwcmV2aW91cyBjaGFyZ2Ugd2lkbm93LCBhbmQgcmV0dXJuIHRydWUuICBUaGVcXG4yNDQyOlxcdCAqIGNhbGxlciBjYW4gc2VlIHRoZSBzZWNvbmQgb25lIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgcmVnaW9uIHdhbGsuXFxuMjQ0MzpcXHQgKiBOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGUgY2FsbGVyIHNob3VsZCB1c2UgZGFtb25fZm9yX2VhY2hfcmVnaW9uKCkgaW5zdGVhZFxcbjI0NDQ6XFx0ICogb2YgZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUoKS4gIElmIGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKCkgaXMgdXNlZCxcXG4yNDQ1OlxcdCAqIHRoZSBzZWNvbmQgcmVnaW9uIHdpbGwganVzdCBiZSBpZ25vcmVkLlxcbjI0NDY6XFx0ICpcXG4yNDQ3OlxcdCAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkLCBmYWxzZSBvdGhlcndpc2UuXFxuMjQ0ODpcXHQgKi9cXG4yNDQ5OlxcdHN0YXRpYyBib29sIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNDUwOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4yNDUxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNDUyOlxcdHtcXG4yNDUzOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjQ1NDpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X3RvX3NraXA7XFxuMjQ1NTpcXHRcXHRib29sIHNraXAgPSBmYWxzZTtcXG4yNDU2OlxcdFxcbjI0NTc6XFx0XFx0LyogU2tpcCBwcmV2aW91c2x5IGNoYXJnZWQgcmVnaW9ucyAqL1xcbjI0NTg6XFx0XFx0aWYgKHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pIHtcXG4yNDU5OlxcdFxcdFxcdGlmICh0ICE9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb20pXFxuMjQ2MDpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yNDYxOlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlX2FkZHJfZnJvbSBcXHUwMDI2XFx1MDAyNlxcbjI0NjI6XFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlYXIuZW5kIFxcdTAwM2M9IHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tKSB7XFxuMjQ2MzpcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDY0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0NjU6XFx0XFx0XFx0fVxcbjI0NjY6XFx0XFxuMjQ2NzpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20gXFx1MDAyNlxcdTAwMjYgci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAzY1xcbjI0Njg6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV9hZGRyX2Zyb20pIHtcXG4yNDY5OlxcdFxcdFxcdFxcdHN6X3RvX3NraXAgPSBBTElHTl9ET1dOKHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tIC1cXG4yNDcwOlxcdFxcdFxcdFxcdFxcdFxcdHItXFx1MDAzZWFyLnN0YXJ0LCBtaW5fcmVnaW9uX3N6KTtcXG4yNDcxOlxcdFxcdFxcdFxcdGlmICghc3pfdG9fc2tpcCkge1xcbjI0NzI6XFx0XFx0XFx0XFx0XFx0aWYgKGRhbW9uX3N6X3JlZ2lvbihyKSBcXHUwMDNjPSBtaW5fcmVnaW9uX3N6KSB7XFxuMjQ3MzpcXHRcXHRcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDc0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0NzU6XFx0XFx0XFx0XFx0XFx0fVxcbjI0NzY6XFx0XFx0XFx0XFx0XFx0c3pfdG9fc2tpcCA9IG1pbl9yZWdpb25fc3o7XFxuMjQ3NzpcXHRcXHRcXHRcXHR9XFxuMjQ3ODpcXHRcXHRcXHRcXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgc3pfdG9fc2tpcCk7XFxuMjQ3OTpcXHRcXHRcXHRcXHRza2lwID0gdHJ1ZTtcXG4yNDgwOlxcdFxcdFxcdH1cXG4yNDgxOlxcdFxcdH1cXG4yNDgyOlxcdG91dDpcXG4yNDgzOlxcdFxcdGlmIChyID09IGRhbW9uX2xhc3RfcmVnaW9uKHQpKSB7XFxuMjQ4NDpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcXG4yNDg1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VfYWRkcl9mcm9tID0gMDtcXG4yNDg2OlxcdFxcdH1cXG4yNDg3OlxcdFxcdHJldHVybiBza2lwO1xcbjI0ODg6XFx0fVxcbjI0ODk6XFx0XFxuMjQ5MDpcXHRzdGF0aWMgdm9pZCBkYW1vc191cGRhdGVfc3RhdChzdHJ1Y3QgZGFtb3MgKnMsXFxuMjQ5MTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN6X3RyaWVkLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQsXFxuMjQ5MjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkKVxcbjI0OTM6XFx0e1xcbjI0OTQ6XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl90cmllZCsrO1xcbjI0OTU6XFx0XFx0cy1cXHUwMDNlc3RhdC5zel90cmllZCArPSBzel90cmllZDtcXG4yNDk2OlxcdFxcdGlmIChzel9hcHBsaWVkKVxcbjI0OTc6XFx0XFx0XFx0cy1cXHUwMDNlc3RhdC5ucl9hcHBsaWVkKys7XFxuMjQ5ODpcXHRcXHRzLVxcdTAwM2VzdGF0LnN6X2FwcGxpZWQgKz0gc3pfYXBwbGllZDtcXG4yNDk5OlxcdFxcdHMtXFx1MDAzZXN0YXQuc3pfb3BzX2ZpbHRlcl9wYXNzZWQgKz0gc3pfb3BzX2ZpbHRlcl9wYXNzZWQ7XFxuMjUwMDpcXHR9XFxuMjUwMTpcXHRcXG4yNTAyOlxcdHN0YXRpYyBib29sIGRhbW9zX2ZpbHRlcl9tYXRjaChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuMjUwMzpcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmaWx0ZXIsXFxuMjUwNDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjUwNTpcXHR7XFxuMjUwNjpcXHRcXHRib29sIG1hdGNoZWQgPSBmYWxzZTtcXG4yNTA3OlxcdFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpO1xcbjI1MDg6XFx0XFx0aW50IHRhcmdldF9pZHggPSAwO1xcbjI1MDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo0MS42Nzg2NDIyMTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NTU1MDc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24sIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyBpdHMgZXhlY3V0aW9uIHBhdGguIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCB3aWxsIGdpdmUgbWUgY29udGV4dCwgYW5kIGZyb20gdGhlcmUgSSBjYW4gYXNzZXNzIGl0cyBwdXJwb3NlIGluIHRoZSBicm9hZGVyIHNjaGVtZSBvZiB0aGluZ3MuIFVuZGVyc3RhbmRpbmcgaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBpcyBrZXkgdG8gZGV0ZXJtaW5pbmcgaXRzIGltcGFjdCBhbmQgd2h5IHdlJ3JlIHVzaW5nIGl0IGluIHRoaXMgc3BlY2lmaWMgbG9jYXRpb24uIEknbSBlc3NlbnRpYWxseSB0cmFjaW5nIGl0cyBcImJyZWFkY3J1bWIgdHJhaWxcIiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBhbGdvcml0aG0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjA1OjQzLjk1NDE5NzE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMyODAzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTI0MTM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjQyNC0vKlxcbm1tL2RhbW9uL2NvcmUuYzoyNDI1OiAqIGRhbW9zX3NraXBfY2hhcmdlZF9yZWdpb24oKSAtIENoZWNrIGlmIHRoZSBnaXZlbiByZWdpb24gb3Igc3RhcnRpbmcgcGFydCBvZlxcbm1tL2RhbW9uL2NvcmUuYy0yNDI2LSAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI0NDgtICovXFxubW0vZGFtb24vY29yZS5jOjI0NDk6c3RhdGljIGJvb2wgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbm1tL2RhbW9uL2NvcmUuYy0yNDUwLVxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNzU2PXN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yNzc0LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzc1OlxcdFxcdGlmIChkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKHQsIHIsIHMsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbm1tL2RhbW9uL2NvcmUuYy0yNzc2LVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo0NS44ODcwMDY1MTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NDY4NzU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIERBTU9OIFF1b3RhIExvZ2ljIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIEl0IGFwcGVhcnMgdG8gYmUgYSBmaXggaW4gdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNb25pdG9yKSBxdW90YSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgZmxhdyB3aGVyZSBpdCB1bmNvbmRpdGlvbmFsbHkgc2tpcHBlZCB0aGUgbGFzdCByZWdpb24gb2YgYSB0YXJnZXQgaWYgaXQgcmVhY2hlZCB0aGF0IHBvaW50LCBldmVuIGlmIHRoZSByZWdpb24gd2FzICpub3QqIGZ1bGx5IG9yIGV2ZW4gcGFydGlhbGx5IGNoYXJnZWQuIFRoYXQncyBhIGRlZmluaXRlIGJ1Zy5cblxuVGhlIHBhdGNoIGNvcnJlY3RzIHRoaXMgYnkgaW50cm9kdWNpbmcgYSBgc2tpcGAgYm9vbGVhbiwgZGVmZXJyaW5nIHRoZSBza2lwIGRlY2lzaW9uIG9uIHRoZSBsYXN0IHJlZ2lvbiB1bnRpbCBhIHByb3BlciBjaGVjay4gSXQgdmVyaWZpZXMgaWYgc2tpcHBpbmcgaXMgYXBwcm9wcmlhdGUgYmFzZWQgb24gYHF1b3RhLVx1MDAzZWNoYXJnZV9hZGRyX2Zyb21gIGFuZCBwb3RlbnRpYWxseSBzcGxpdHMgdGhlIHJlZ2lvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZSBpcyB0aGF0IGl0IG5vdyAqY29uZGl0aW9uYWxseSogcmVzZXRzIGBxdW90YS1cdTAwM2VjaGFyZ2VfdGFyZ2V0X2Zyb21gIGFuZCBgY2hhcmdlX2FkZHJfZnJvbWAgb25seSAqYWZ0ZXIqIHRoZSBza2lwIGRlY2lzaW9uLiBUaGlzIGlzIGEgcHVyZWx5IGFsZ29yaXRobWljIGFuZCBjb250cm9sLWZsb3cgYWRqdXN0bWVudC5cblxuTm93LCByZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgd2UgbmVlZCB0byBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBJJ20gZ29pbmcgdG8gcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLCBsb29raW5nIGZvciB0aGUgcG90ZW50aWFsOlxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBOb3QgYXBwbGljYWJsZSBoZXJlLCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2Vyc3BhY2UuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE6KiogVGhlIGBza2lwYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBmYWxzZS4gYHN6X3RvX3NraXBgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFN0cnVjdHVyZXMgYHRgLCBgcmAsIGBzYCwgYW5kIGBxdW90YWAgYXJlIGV4aXN0aW5nIGhlYXAvaW50ZXJuYWwgREFNT04gc3RydWN0dXJlcyBhbmQgdXNlZCBhcHByb3ByaWF0ZWx5LiBTbywgbm8gaXNzdWVzIHRoZXJlLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbjoqKiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBpbiB0aGlzIHBhdGNoOyB3ZSBhcmUgbWVyZWx5IG1vZGlmeWluZyBleGlzdGluZyBsb2dpYy5cbjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgYm91bmRzIGNoZWNrcyBvciBhbnkgY2hhbmdlIHRoYXQgd291bGQgZXhwb3NlIGV4aXN0aW5nIGJ1ZmZlcnMgaW4gdGhpcyBjb2RlLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSB2YXJpYWJsZXMgYXJlIGFsbCBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nLCBpbml0aWFsaXplZCBEQU1PTiBzdHJ1Y3R1cmVzLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgYSBjb250cm9sLWZsb3cgaXNzdWUgcmF0aGVyIHRoYW4gYSBtZW1vcnktcmVsYXRlZCBvbmUuXG5cbkZ1cnRoZXJtb3JlLCBsZXQncyBjb25zaWRlciB0aGUgZGlmZmVyZW5jZXMgaW4gS0FTQU4gYW5kIEtNU0FOLiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgdG91Y2hlcyB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbmAuIEl0IGZpeGVzIHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgd2hlbiB0byBza2lwIGEgY2hhcmdlZCByZWdpb24gYW5kIGNvcnJlY3RseSByZXNldHMgcXVvdGEgcG9pbnRlcnMgYXQgdGhlIGVuZC4gQWxsIHZhcmlhYmxlcyB1c2VkIGxvY2FsbHkgYXJlIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyBzdGFjay9oZWFwIHVuaW5pdGlhbGl6ZWQgcmVhZCBvcGVyYXRpb25zLCBhbmQgbm8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIChyZWdpb24gbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBtZW1vcnkgc2FmZXR5IG1lY2hhbmlzbXMuIFRoZXJlIGFyZSBubyBkaXJlY3QgS01TQU4gcmlza3MgaGVyZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJ20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2LCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzowNTo1Mi4zNzE2OTY1MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpYCBpbiBgbW0vZGFtb24vY29yZS5jYCB0byBmaXggcmVnaW9uIHNraXBwaW5nIGFuZCBxdW90YSB0cmFja2luZyBvbiB0aGUgbGFzdCByZWdpb24gb2YgYSBEQU1PTiB0YXJnZXQuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYHNraXBgKSBhbmQgc3RydWN0IG1lbWJlcnMgYWNjZXNzZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBicmFuY2hpbmcsIGFuZCBubyBhbGxvY2F0aW9ucyBvciBidWZmZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKClgIGluIGBtbS9kYW1vbi9jb3JlLmNgIHRvIGZpeCByZWdpb24gc2tpcHBpbmcgYW5kIHF1b3RhIHRyYWNraW5nIG9uIHRoZSBsYXN0IHJlZ2lvbiBvZiBhIERBTU9OIHRhcmdldC4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgc2tpcGApIGFuZCBzdHJ1Y3QgbWVtYmVycyBhY2Nlc3NlZCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGJyYW5jaGluZywgYW5kIG5vIGFsbG9jYXRpb25zIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[1] Phase: Succeeded StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 17:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 17:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2] Phase: Succeeded StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 17:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 17:06:03 +0000 UTC FinishedAt: 2026-09-08 17:06:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowrx4fs/series-workflowrx4fs-convert-artifact-1319985285/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 17:06:13 +0000 UTC FinishedAt: 2026-09-08 17:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 17:06:13 +0000 UTC FinishedAt: 2026-09-08 17:23: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:*4f2e64dd-1e0d-4144-accc-3d06d539f371,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-workflowrx4fs/series-workflowrx4fs-convert-artifact-1319985285/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": "50291a69-b072-4e1e-8b86-f071cd79baf7", "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-workflowrx4fs/series-workflowrx4fs-build-action-1064049707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:06:13 +0000 UTC FinishedAt: 2026-09-08 17:22: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:*4f2e64dd-1e0d-4144-accc-3d06d539f371,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-workflowrx4fs/series-workflowrx4fs-convert-artifact-1319985285/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": "50291a69-b072-4e1e-8b86-f071cd79baf7", "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-workflowrx4fs/series-workflowrx4fs-build-action-1064049707/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 17:23:09 +0000 UTC FinishedAt: 2026-09-08 17:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 17:23:09 +0000 UTC FinishedAt: 2026-09-08 17:23:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 17:23:09 +0000 UTC FinishedAt: 2026-09-08 17:23:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 17:23:09 +0000 UTC FinishedAt: 2026-09-08 17:23:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},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-workflowrx4fs/series-workflowrx4fs-convert-artifact-284350304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 17:23:19 +0000 UTC FinishedAt: 2026-09-08 17:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 17:23:19 +0000 UTC FinishedAt: 2026-09-08 17:25:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*50291a69-b072-4e1e-8b86-f071cd79baf7,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-workflowrx4fs/series-workflowrx4fs-build-action-1064049707/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-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 17:25:26 +0000 UTC FinishedAt: 2026-09-08 17:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 17:25:26 +0000 UTC FinishedAt: 2026-09-08 17:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 17:25:26 +0000 UTC FinishedAt: 2026-09-08 17:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 17:25:26 +0000 UTC FinishedAt: 2026-09-08 17:41:38 +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:*4f2e64dd-1e0d-4144-accc-3d06d539f371,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-workflowrx4fs/series-workflowrx4fs-convert-artifact-284350304/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": "f48cb67d-6619-444b-973d-bd69ee71dae3", "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-workflowrx4fs/series-workflowrx4fs-build-action-1801798684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:25:26 +0000 UTC FinishedAt: 2026-09-08 17:41:28 +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:*4f2e64dd-1e0d-4144-accc-3d06d539f371,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-workflowrx4fs/series-workflowrx4fs-convert-artifact-284350304/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": "f48cb67d-6619-444b-973d-bd69ee71dae3", "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-workflowrx4fs/series-workflowrx4fs-build-action-1801798684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 17:41:38 +0000 UTC FinishedAt: 2026-09-08 17:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 17:41:38 +0000 UTC FinishedAt: 2026-09-08 17:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 17:41:38 +0000 UTC FinishedAt: 2026-09-08 17:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 17:41:38 +0000 UTC FinishedAt: 2026-09-08 17:43:22 +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:*f48cb67d-6619-444b-973d-bd69ee71dae3,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-workflowrx4fs/series-workflowrx4fs-build-action-1801798684/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-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},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:*50291a69-b072-4e1e-8b86-f071cd79baf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f48cb67d-6619-444b-973d-bd69ee71dae3,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-workflowrx4fs/series-workflowrx4fs-build-action-1064049707/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-workflowrx4fs/series-workflowrx4fs-build-action-1801798684/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 17:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 17:43:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},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-workflowrx4fs/series-workflowrx4fs-convert-artifact-1392503737/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 17:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 17:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 17:43:33 +0000 UTC FinishedAt: 2026-09-08 17:43:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 17:43:43 +0000 UTC FinishedAt: 2026-09-08 20:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrx4fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_skip_charged_region","damon_do_apply_schemes","damos_apply_target","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"7dbd9c69-5f3a-4a32-9932-19953413f8d6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 17:43:43 +0000 UTC FinishedAt: 2026-09-08 20:44:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*50291a69-b072-4e1e-8b86-f071cd79baf7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f48cb67d-6619-444b-973d-bd69ee71dae3,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-workflowrx4fs/series-workflowrx4fs-build-action-1064049707/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-workflowrx4fs/series-workflowrx4fs-build-action-1801798684/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-workflowrx4fs/series-workflowrx4fs-convert-artifact-1392503737/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,}