Name: series-workflowfp5z6 Phase: Succeeded StartedAt: 2026-09-02 07:21:58 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[0] Phase: Succeeded StartedAt: 2026-09-02 07:21:58 +0000 UTC FinishedAt: 2026-09-02 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 07:21:58 +0000 UTC FinishedAt: 2026-09-02 07:30:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "a3860947-22ea-48a9-8981-5196af809be2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ufs_load_cylinder", "ufs_new_inode", "ufs_free_inode", "ufs_free_fragments", "ufs_free_blocks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZnNfbG9hZF9jeWxpbmRlciYjMzQ7LAogICAgJiMzNDt1ZnNfbmV3X2lub2RlJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2lub2RlJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2ZyYWdtZW50cyYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9ibG9ja3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2YWM4NGI0MWMzZmJkNzQzNDlkY2UwYjAwOGMzM2YwM2RjZTJlNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIzOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmNcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XG4tLS0gYS9mcy91ZnMvY3lsaW5kZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL2N5bGluZGVyLmNcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuIFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuIFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcbiYjNDM7XHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xuJiM0MztcdGNvbnN0IGNoYXIgKmVycjtcbiBcdHVuc2lnbmVkIGksIGo7XG4gXG4gXHRVRlNEKFwmIzM0O0VOVEVSLCBjZ25vICV1LCBiaXRtYXBfbnIgJXVcXG5cJiMzNDssIGNnbm8sIGJpdG1hcF9ucik7XG5AQCAtNDgsOCAmIzQzOzUwLDEwIEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFswXSA9IHNiaS1cdTAwM2VzX3VjZ1tjZ25vXTtcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuIFx0XHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2VmcmFnbWVudCAmIzQzOyBpKTtcbi1cdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSlcbiYjNDM7XHRcdGlmICghVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbaV0pIHtcbiYjNDM7XHRcdFx0ZXJyID0gXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcJiMzNDs7XG4gXHRcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xuIFx0XHRcdFxuQEAgLTY4LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJzdW1vZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3RlcnN1bW9mZik7XG4gXHR1Y3BpLVx1MDAzZWNfY2x1c3Rlcm9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcbiBcdHVjcGktXHUwMDNlY19uY2x1c3RlcmJsa3MgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfbmNsdXN0ZXJibGtzKTtcbiYjNDM7XG4mIzQzO1x0Y2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2Vjb3VudCAqIHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuJiM0MztcdGZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktXHUwMDNlc19mcGcpO1xuJiM0MztcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuJiM0MztcdGlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHxcbiYjNDM7XHQgICAgKHU2NCl1Y3BpLVx1MDAzZWNfZnJlZW9mZiAmIzQzOyBmcmVlX2JpdG1hcF9ieXRlcyBcdTAwM2UgY2dfYnl0ZXMpIHtcbiYjNDM7XHRcdGVyciA9IFwmIzM0O2N5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXCYjMzQ7O1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiBcdFxuQEAgLTc1LDcgJiM0Mzs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRmb3IgKGogPSAxOyBqIFx1MDAzYyBpOyBqJiM0MzsmIzQzOylcbiBcdFx0YnJlbHNlKFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2pdKTtcbiBcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuLVx0dWZzX2Vycm9yIChzYiwgXCYjMzQ7dWZzX3JlYWRfY3lsaW5kZXJcJiMzNDssIFwmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCYjMzQ7LCBjZ25vKTtcbiYjNDM7XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWZzX2xvYWRfY3lsaW5kZXImIzM0OywKICAgICYjMzQ7dWZzX25ld19pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9mcmFnbWVudHMmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNzoyMzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmMKaW5kZXggYTI4MTMyNzBjMzAzZS4uZmVjNmM5ZGZiMDU1ZCAxMDA2NDQKLS0tIGEvZnMvdWZzL2N5bGluZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL2N5bGluZGVyLmMKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpOwogCXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTsKIAlzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnOwomIzQzOwl1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzOwomIzQzOwljb25zdCBjaGFyICplcnI7CiAJdW5zaWduZWQgaSwgajsKIAogCVVGU0QoJiMzNDtFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XG4mIzM0OywgY2dubywgYml0bWFwX25yKTsKQEAgLTQ4LDggJiM0Mzs1MCwxMCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCVVDUElfVUJIKHVjcGkpLSZndDtiaFswXSA9IHNiaS0mZ3Q7c191Y2dbY2dub107CiAJZm9yIChpID0gMTsgaSAmbHQ7IFVDUElfVUJIKHVjcGkpLSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKIAkJVUNQSV9VQkgodWNwaSktJmd0O2JoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLSZndDtmcmFnbWVudCAmIzQzOyBpKTsKLQkJaWYgKCFVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbaV0pCiYjNDM7CQlpZiAoIVVDUElfVUJIKHVjcGkpLSZndDtiaFtpXSkgewomIzQzOwkJCWVyciA9ICYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXUmIzM0OzsKIAkJCWdvdG8gZmFpbGVkOwomIzQzOwkJfQogCX0KIAlzYmktJmd0O3NfY2dub1tiaXRtYXBfbnJdID0gY2dubzsKIAkJCQpAQCAtNjgsNiAmIzQzOzcyLDE2IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJdWNwaS0mZ3Q7Y19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTsKIAl1Y3BpLSZndDtjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLSZndDtjZ191LmNnXzQ0LmNnX2NsdXN0ZXJvZmYpOwogCXVjcGktJmd0O2NfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpOwomIzQzOwomIzQzOwljZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLSZndDtjb3VudCAqIHNiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS0mZ3Q7c19mcGcpOwomIzQzOwkvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi8KJiM0MzsJaWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fAomIzQzOwkgICAgKHU2NCl1Y3BpLSZndDtjX2ZyZWVvZmYgJiM0MzsgZnJlZV9iaXRtYXBfYnl0ZXMgJmd0OyBjZ19ieXRlcykgewomIzQzOwkJZXJyID0gJiMzNDtjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcCYjMzQ7OwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KJiM0MzsKIAlVRlNEKCYjMzQ7RVhJVFxuJiMzNDspOwogCXJldHVybiB0cnVlOwogCQpAQCAtNzUsNyAmIzQzOzg5LDcgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlmb3IgKGogPSAxOyBqICZsdDsgaTsgaiYjNDM7JiM0MzspCiAJCWJyZWxzZShVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Ymhbal0pOwogCXNiaS0mZ3Q7c19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTsKLQl1ZnNfZXJyb3IgKHNiLCAmIzM0O3Vmc19yZWFkX2N5bGluZGVyJiMzNDssICYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXUmIzM0OywgY2dubyk7CiYjNDM7CXVmc19lcnJvcihzYiwgJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LCBlcnIsIGNnbm8pOwogCXJldHVybiBmYWxzZTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFVGUyBDeWxpbmRlciBSZWFkIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBwaW5wb2ludGVkIHJpZ2h0IHRoZXJlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2xvc2VseSBleGFtaW5pbmcgYGZzL3Vmcy9jeWxpbmRlci5jYCBhbmQgdGhlbiBicm9hZGVuIG15IHZpZXcgdG8gdGhlIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYGZzL3Vmcy9gIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMsIGFuZCBhbHNvIHNlZSB3aGF0IGtleSBzeW1ib2xzIGFyZSBhdCBwbGF5LiBCYXNpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVzdGFibGlzaCB0aGUgcGF0Y2gmIzM5O3MgY29udGV4dCB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLgoKVG8gc3BlZWQgdGhpbmdzIHVwLCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgdG9vbHMgSSYjMzk7bSB1c2VkIHRvOiBhIGdvb2QgZmlsZSByZWFkZXIgb3IgYGdyZXBgIGlzIGVzc2VudGlhbCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29kZSBzZWN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2Ugc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFyZSByZWxhdGVkLiBNeSBnb2FsIGlzIHRvIHJhcGlkbHkgYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjI5OnN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuZnMvdWZzL2N5bGluZGVyLmM6OTI6XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuZnMvdWZzL2N5bGluZGVyLmMtOTMtXHRyZXR1cm4gZmFsc2U7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cdFx0fSBlbHNlIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTIxMy1cdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTQ1My0gKi9cbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XG4tLVxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyMTctXHRpZiAoIXNiX3Jkb25seShzYikpXG5mcy91ZnMvc3VwZXIuYzoxMjE4Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cdFx0XHRnb3RvIGZhaWxlZDtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMjkzLVx0XHR9XG5mcy91ZnMvc3VwZXIuYzoxMjk0Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XG5mcy91ZnMvc3VwZXIuYy0xMjk1LVx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBwcm9jZXNzIGZvciB0aGUgVUZTIGZpbGVzeXN0ZW0uIE15IGZpcnN0IG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZpbGVzOiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmcy91ZnMvS2NvbmZpZ2AgdG8gbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBVRlMuIFRoaXMgd2lsbCBzaG93IG1lIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdGhlIHVzZXIuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFVGUyBtb2R1bGUgZ2V0cyBidWlsdCwgc28gdGhlIGBmcy91ZnMvTWFrZWZpbGVgIGlzIHRoZSBuZXh0IHRhcmdldC4gVGhhdCBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBjb21waWxpbmcgdGhlIFVGUyBjb2RlIGludG8gdGhlIGtlcm5lbC4gVGhlc2UgdHdvIGZpbGVzIHRvZ2V0aGVyIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgVUZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCAocmVhZCBvbmx5KVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIEJTRCBhbmQgZGVyaXZhdGUgdmVyc2lvbnMgb2YgVW5peCAoc3VjaCBhcyBTdW5PUywgRnJlZUJTRCwgTmV0QlNELFxuICAgODpcdFx0ICBPcGVuQlNEIGFuZCBOZVhUc3RlcCkgdXNlIGEgZmlsZSBzeXN0ZW0gY2FsbGVkIFVGUy4gU29tZSBTeXN0ZW0gVlxuICAgOTpcdFx0ICBVbml4ZXMgY2FuIGNyZWF0ZSBhbmQgbW91bnQgaGFyZCBkaXNrIHBhcnRpdGlvbnMgYW5kIGRpc2tldHRlcyB1c2luZ1xuICAxMDpcdFx0ICB0aGlzIGZpbGUgc3lzdGVtIGFzIHdlbGwuIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gcmVhZCBmcm9tXG4gIDExOlx0XHQgIHRoZXNlIHBhcnRpdGlvbnM7IGlmIHlvdSBhbHNvIHdhbnQgdG8gd3JpdGUgdG8gdGhlbSwgc2F5IFkgdG8gdGhlXG4gIDEyOlx0XHQgIGV4cGVyaW1lbnRhbCBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydFwmIzM0OywgYmVsb3cuIFBsZWFzZSByZWFkIHRoZVxuICAxMzpcdFx0ICBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS91ZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdCAgICAgICAgICBUaGUgcmVjZW50bHkgcmVsZWFzZWQgVUZTMiB2YXJpYW50ICh1c2VkIGluIEZyZWVCU0QgNS54KSBpc1xuICAxNjpcdCAgICAgICAgICBSRUFELU9OTFkgc3VwcG9ydGVkLlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgZ2VuZXJhbGx5IG5vdCBuZWVkZWQgZm9yIGZsb3BwaWVzLCBzaW5jZSBhXG4gIDE5Olx0XHQgIGdvb2QgcG9ydGFibGUgd2F5IHRvIHRyYW5zcG9ydCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYmV0d2VlbiB1bml4ZXNcbiAgMjA6XHRcdCAgKGFuZCBldmVuIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKSBpcyBnaXZlbiBieSB0aGUgdGFyIHByb2dyYW0gKFwmIzM0O21hblxuICAyMTpcdFx0ICB0YXJcJiMzNDsgb3IgcHJlZmVyYWJseSBcJiMzNDtpbmZvIHRhclwmIzM0OykuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFdoZW4gYWNjZXNzaW5nIE5lWFRzdGVwIGZpbGVzLCB5b3UgbWF5IG5lZWQgdG8gY29udmVydCB0aGVtIGZyb20gdGhlXG4gIDI0Olx0XHQgIE5lWFQgY2hhcmFjdGVyIHNldCB0byB0aGUgTGF0aW4xIGNoYXJhY3RlciBzZXQ7IHVzZSB0aGUgcHJvZ3JhbVxuICAyNTpcdFx0ICByZWNvZGUgKFwmIzM0O2luZm8gcmVjb2RlXCYjMzQ7KSBmb3IgdGhpcyBwdXJwb3NlLlxuICAyNjpcdFxuICAyNzpcdFx0ICBUbyBjb21waWxlIHRoZSBVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1ZnMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBhbGwgb2YgdGhpcyBiZWZvcmUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IE4uXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFVGU19GU19XUklURVxuICAzMzpcdFx0Ym9vbCBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydCAoREFOR0VST1VTKVwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBVRlNfRlNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0cnkgd3JpdGluZyB0byBVRlMgcGFydGl0aW9ucy4gVGhpcyBpc1xuICAzNzpcdFx0ICBleHBlcmltZW50YWwsIHNvIHlvdSBzaG91bGQgYmFjayB1cCB5b3VyIFVGUyBwYXJ0aXRpb25zIGJlZm9yZWhhbmQuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFVGU19ERUJVR1xuICA0MDpcdFx0Ym9vbCBcJiMzNDtVRlMgZGVidWdnaW5nXCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIFVGU19GU1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgVUZTIGZpbGVzeXN0ZW0sIHNheVxuICA0NDpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIF9tYW55XyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0byBiZVxuICA0NTpcdFx0ICB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIERpYWdub3N0aWM6IE1ha2VmaWxlIEluc3BlY3Rpb24qKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBVRlMgZmlsZSBzeXN0ZW0gbW9kdWxlcyBzaG91bGQgcmVzaWRlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBidWlsZCBwcm9jZXNzIG9mIFVGUy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGlzc3VlLCBhbmQgdGhpcyBgTWFrZWZpbGVgIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbnN0YWxsZWQuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGluY2x1ZGUgZGlyZWN0aXZlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpdGhpbiBpdC4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3Igb3IgdmFyaWF0aW9uIGluIHRoZSBidWlsZCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Vmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggdWZzIGZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19VRlNfRlMpICYjNDM7PSB1ZnMub1xuICAgNzpcdFxuICAgODpcdHVmcy1vYmpzIDo9IGJhbGxvYy5vIGN5bGluZGVyLm8gZGlyLm8gZmlsZS5vIGlhbGxvYy5vIGlub2RlLm8gXFxcbiAgIDk6XHRcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19VRlNfREVCVUcpICAgICYjNDM7PSAtRERFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdWZzX2xvYWRfY3lsaW5kZXJgIGFuZCBgdWZzX3JlYWRfY3lsaW5kZXJgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGguIEFyZSB0aGV5IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBmaWxlc3lzdGVtIGxheWVyLCBvciBhcmUgdGhleSBidXJpZWQgZGVlcGVyIHdpdGhpbiBhIHBhcnRpY3VsYXIgZHJpdmVyIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIHN0b3JhZ2UgYWNjZXNzIHBhdGguIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvcGVyYXRpb25zIHRyaWdnZXIgdGhlc2UgY2FsbHMg4oCTIGlzIGl0IGR1cmluZyBpbm9kZSBsb2FkaW5nLCBkYXRhIGJsb2NrIHJlYWRzLCBtZXRhZGF0YSBvcGVyYXRpb25zLCBvciBwZXJoYXBzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBvZiB0aG9zZSBmdW5jdGlvbiBuYW1lcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfbG9hZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvYmFsbG9jLmM9NjI9dm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyYWdtZW50LCB1bnNpZ25lZCBjb3VudClcbi0tXG5mcy91ZnMvYmFsbG9jLmMtODctXHRcdFxuZnMvdWZzL2JhbGxvYy5jOjg4Olx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2dubyk7XG5mcy91ZnMvYmFsbG9jLmMtODktXHRpZiAoIXVjcGkpIFxuLS1cbmZzL3Vmcy9iYWxsb2MuYz0xNDU9dm9pZCB1ZnNfZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyYWdtZW50LCB1bnNpZ25lZCBjb3VudClcbi0tXG5mcy91ZnMvYmFsbG9jLmMtMTgyLVxuZnMvdWZzL2JhbGxvYy5jOjE4MzpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xuZnMvdWZzL2JhbGxvYy5jLTE4NC1cdGlmICghdWNwaSkgXG4tLVxuZnMvdWZzL2JhbGxvYy5jPTQ5Nz1zdGF0aWMgdTY0IHVmc19hZGRfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBmcmFnbWVudCxcbi0tXG5mcy91ZnMvYmFsbG9jLmMtNTE3LVx0XHRyZXR1cm4gMDtcbmZzL3Vmcy9iYWxsb2MuYzo1MTg6XHR1Y3BpID0gdWZzX2xvYWRfY3lsaW5kZXIgKHNiLCBjZ25vKTtcbmZzL3Vmcy9iYWxsb2MuYy01MTktXHRpZiAoIXVjcGkpXG4tLVxuZnMvdWZzL2JhbGxvYy5jPTU3Nj1zdGF0aWMgdTY0IHVmc19hbGxvY19mcmFnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgY2dubyxcbi0tXG5mcy91ZnMvYmFsbG9jLmMtNjIzLWNnX2ZvdW5kOlxuZnMvdWZzL2JhbGxvYy5jOjYyNDpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xuZnMvdWZzL2JhbGxvYy5jLTYyNS1cdGlmICghdWNwaSlcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYz0xMDA9dm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgYml0bWFwX25yKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE0My0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjE0NDpzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcbmZzL3Vmcy9jeWxpbmRlci5jLTE0NS1cdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE1NS1cdGlmIChjZ25vIFx1MDAzZT0gdXNwaS1cdTAwM2VzX25jZykge1xuZnMvdWZzL2N5bGluZGVyLmM6MTU2Olx0XHR1ZnNfcGFuaWMgKHNiLCBcJiMzNDt1ZnNfbG9hZF9jeWxpbmRlclwmIzM0OywgXCYjMzQ7aW50ZXJuYWwgZXJyb3IsIGhpZ2ggbnVtYmVyIG9mIGNnXCYjMzQ7KTtcbmZzL3Vmcy9jeWxpbmRlci5jLTE1Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmMtMTcxLVx0XHRcdGlmIChzYmktXHUwMDNlc19jZ25vW2Nnbm9dICE9IGNnbm8pIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3MjpcdFx0XHRcdHVmc19wYW5pYyAoc2IsIFwmIzM0O3Vmc19sb2FkX2N5bGluZGVyXCYjMzQ7LCBcJiMzNDtpbnRlcm5hbCBlcnJvciwgd3JvbmcgbnVtYmVyIG9mIGNnIGluIGNhY2hlXCYjMzQ7KTtcbmZzL3Vmcy9jeWxpbmRlci5jLTE3My1cdFx0XHRcdFVGU0QoXCYjMzQ7RVhJVCAoRkFJTEVEKVxcblwmIzM0Oyk7XG4tLVxuZnMvdWZzL2lhbGxvYy5jPTU3PXZvaWQgdWZzX2ZyZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL3Vmcy9pYWxsb2MuYy04Mi1cdGJpdCA9IHVmc19pbm90b2Nnb2ZmIChpbm8pO1xuZnMvdWZzL2lhbGxvYy5jOjgzOlx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2cpO1xuZnMvdWZzL2lhbGxvYy5jLTg0LVx0aWYgKCF1Y3BpKSB7XG4tLVxuZnMvdWZzL2lhbGxvYy5jPTE3Mj1zdHJ1Y3QgaW5vZGUgKnVmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy91ZnMvaWFsbG9jLmMtMjM4LWNnX2ZvdW5kOlxuZnMvdWZzL2lhbGxvYy5jOjIzOTpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcbmZzL3Vmcy9pYWxsb2MuYy0yNDAtXHRpZiAoIXVjcGkpIHtcbi0tXG5mcy91ZnMvdWZzLmg9ODg9dTY0IHVmc19uZXdfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqLCB2b2lkICosIHU2NCBmcmFnbWVudCwgdTY0IGdvYWwsXG4tLVxuZnMvdWZzL3Vmcy5oLTkxLS8qIGN5bGluZGVyLmMgKi9cbmZzL3Vmcy91ZnMuaDo5MjpleHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTtcbmZzL3Vmcy91ZnMuaC05My1leHRlcm4gdm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFVGUyBDeWxpbmRlciBMb2FkaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFVGUyBjeWxpbmRlciBkYXRhIGlzIGxvYWRlZC4gSSBzZWUgYHVmc19sb2FkX2N5bGluZGVyYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGZpbGUgd2l0aGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSB1c2VkIGludGVybmFsbHkgYnkgb3RoZXIgcGFydHMgb2YgdGhlIFVGUyBjb2RlLiBUaGVuLCBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIHN0YXRpYyB3aXRoaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBtb2R1bGUgYXJlIGEgZ29vZCBoaW50IGFzIHRvIGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb25hbGl0eS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB1ZnNfbG9hZF9jeWxpbmRlcmAgZGVmaW5pdGlvbiBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0ICogSWYgY3lsaW5kZXIgZ3JvdXAgaXMgbm90IGluIGNhY2hlLCB3ZSB3aWxsIGxvYWQgaXQgZnJvbSBkaXNrLlxuIDE0MTpcdCAqXG4gMTQyOlx0ICogVGhlIGNhY2hlIGlzIG1hbmFnZWQgYnkgTFJVIGFsZ29yaXRobS4gXG4gMTQzOlx0ICovXG4gMTQ0Olx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoXG4gMTQ1Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgY2dubylcbiAxNDY6XHR7XG4gMTQ3Olx0XHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xuIDE0ODpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuIDE0OTpcdFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuIDE1MDpcdFx0dW5zaWduZWQgY2csIGksIGo7XG4gMTUxOlx0XG4gMTUyOlx0XHRVRlNEKFwmIzM0O0VOVEVSLCBjZ25vICV1XFxuXCYjMzQ7LCBjZ25vKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdHVzcGkgPSBzYmktXHUwMDNlc191c3BpO1xuIDE1NTpcdFx0aWYgKGNnbm8gXHUwMDNlPSB1c3BpLVx1MDAzZXNfbmNnKSB7XG4gMTU2Olx0XHRcdHVmc19wYW5pYyAoc2IsIFwmIzM0O3Vmc19sb2FkX2N5bGluZGVyXCYjMzQ7LCBcJiMzNDtpbnRlcm5hbCBlcnJvciwgaGlnaCBudW1iZXIgb2YgY2dcJiMzNDspO1xuIDE1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNTg6XHRcdH1cbiAxNTk6XHRcdC8qXG4gMTYwOlx0XHQgKiBDeWxpbmRlciBncm91cCBudW1iZXIgY2cgaXQgaW4gY2FjaGUgYW5kIGl0IHdhcyBsYXN0IHVzZWRcbiAxNjE6XHRcdCAqL1xuIDE2MjpcdFx0aWYgKHNiaS1cdTAwM2VzX2Nnbm9bMF0gPT0gY2dubykge1xuIDE2MzpcdFx0XHRVRlNEKFwmIzM0O0VYSVRcXG5cJiMzNDspO1xuIDE2NDpcdFx0XHRyZXR1cm4gc2JpLVx1MDAzZXNfdWNwaVswXTtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdC8qXG4gMTY3Olx0XHQgKiBOdW1iZXIgb2YgY3lsaW5kZXIgZ3JvdXBzIGlzIG5vdCBoaWdoZXIgdGhhbiBVRlNfTUFYX0dST1VQX0xPQURFRFxuIDE2ODpcdFx0ICovXG4gMTY5Olx0XHRpZiAodXNwaS1cdTAwM2VzX25jZyBcdTAwM2M9IFVGU19NQVhfR1JPVVBfTE9BREVEKSB7XG4gMTcwOlx0XHRcdGlmIChzYmktXHUwMDNlc19jZ25vW2Nnbm9dICE9IFVGU19DR05PX0VNUFRZKSB7XG4gMTcxOlx0XHRcdFx0aWYgKHNiaS1cdTAwM2VzX2Nnbm9bY2dub10gIT0gY2dubykge1xuIDE3MjpcdFx0XHRcdFx0dWZzX3BhbmljIChzYiwgXCYjMzQ7dWZzX2xvYWRfY3lsaW5kZXJcJiMzNDssIFwmIzM0O2ludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcJiMzNDspO1xuIDE3MzpcdFx0XHRcdFx0VUZTRChcJiMzNDtFWElUIChGQUlMRUQpXFxuXCYjMzQ7KTtcbiAxNzQ6XHRcdFx0XHRcdHJldHVybiBOVUxMO1xuIDE3NTpcdFx0XHRcdH1cbiAxNzY6XHRcdFx0fSBlbHNlIHtcbiAxNzc6XHRcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG4gMTc4Olx0XHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuIDE3OTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTgwOlx0XHRcdFx0fVxuIDE4MTpcdFx0XHR9XG4gMTgyOlx0XHRcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gMTgzOlx0XHRcdHJldHVybiBzYmktXHUwMDNlc191Y3BpW2Nnbm9dO1xuIDE4NDpcdFx0fVxuIDE4NTpcdFx0LypcbiAxODY6XHRcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBpbiBjYWNoZSBidXQgaXQgd2FzIG5vdCBsYXN0IHVzZWQsIFxuIDE4NzpcdFx0ICogd2Ugd2lsbCBtb3ZlIHRvIHRoZSBmaXJzdCBwb3NpdGlvblxuIDE4ODpcdFx0ICovXG4gMTg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYmktXHUwMDNlc19jZ19sb2FkZWQgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VzX2Nnbm9baV0gIT0gY2dubzsgaSYjNDM7JiM0MzspO1xuIDE5MDpcdFx0aWYgKGkgXHUwMDNjIHNiaS1cdTAwM2VzX2NnX2xvYWRlZCBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZXNfY2dub1tpXSA9PSBjZ25vKSB7XG4gMTkxOlx0XHRcdGNnID0gc2JpLVx1MDAzZXNfY2dub1tpXTtcbiAxOTI6XHRcdFx0dWNwaSA9IHNiaS1cdTAwM2VzX3VjcGlbaV07XG4gMTkzOlx0XHRcdGZvciAoaiA9IGk7IGogXHUwMDNlIDA7IGotLSkge1xuIDE5NDpcdFx0XHRcdHNiaS1cdTAwM2VzX2Nnbm9bal0gPSBzYmktXHUwMDNlc19jZ25vW2otMV07XG4gMTk1Olx0XHRcdFx0c2JpLVx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cdTAwM2VzX3VjcGlbai0xXTtcbiAxOTY6XHRcdFx0fVxuIDE5NzpcdFx0XHRzYmktXHUwMDNlc19jZ25vWzBdID0gY2c7XG4gMTk4Olx0XHRcdHNiaS1cdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xuIDE5OTpcdFx0LypcbiAyMDA6XHRcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBub3QgaW4gY2FjaGUsIHdlIHdpbGwgcmVhZCBpdCBmcm9tIGRpc2tcbiAyMDE6XHRcdCAqIGFuZCBwdXQgaXQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uXG4gMjAyOlx0XHQgKi9cbiAyMDM6XHRcdH0gZWxzZSB7XG4gMjA0Olx0XHRcdGlmIChzYmktXHUwMDNlc19jZ19sb2FkZWQgXHUwMDNjIFVGU19NQVhfR1JPVVBfTE9BREVEKVxuIDIwNTpcdFx0XHRcdHNiaS1cdTAwM2VzX2NnX2xvYWRlZCYjNDM7JiM0Mzs7XG4gMjA2Olx0XHRcdGVsc2VcbiAyMDc6XHRcdFx0XHR1ZnNfcHV0X2N5bGluZGVyIChzYiwgVUZTX01BWF9HUk9VUF9MT0FERUQtMSk7XG4gMjA4Olx0XHRcdHVjcGkgPSBzYmktXHUwMDNlc191Y3BpW3NiaS1cdTAwM2VzX2NnX2xvYWRlZCAtIDFdO1xuIDIwOTpcdFx0XHRmb3IgKGogPSBzYmktXHUwMDNlc19jZ19sb2FkZWQgLSAxOyBqIFx1MDAzZSAwOyBqLS0pIHtcbiAyMTA6XHRcdFx0XHRzYmktXHUwMDNlc19jZ25vW2pdID0gc2JpLVx1MDAzZXNfY2dub1tqLTFdO1xuIDIxMTpcdFx0XHRcdHNiaS1cdTAwM2VzX3VjcGlbal0gPSBzYmktXHUwMDNlc191Y3BpW2otMV07XG4gMjEyOlx0XHRcdH1cbiAyMTM6XHRcdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG4gMjE0Olx0XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbiAyMTU6XHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuIDIxNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDIxNzpcdFx0XHR9XG4gMjE4Olx0XHR9XG4gMjE5Olx0XHRVRlNEKFwmIzM0O0VYSVRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgYXQgdGhlIGBmcy91ZnMvc3VwZXIuY2AgZmlsZSwgYW5kIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzYCBmdW5jdGlvbiBiZXR0ZXIuIEl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgdGhlIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMgYXJlIGxvYWRlZCBmcm9tIGRpc2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGNhbGxzIHRoaXMgdGhpbmcuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHB1dCBpdCBpbiBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSB2YXJpb3VzIHBvaW50cyB0aGF0IGl0JiMzOTtzIGNydWNpYWwgd2l0aGluIHRoZSB3aWRlciBVRlMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hlbiBhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgYWxsIHRoZSBjYWxscyB0byBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2Agd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0XG4gNDUxOlx0LypcbiA0NTI6XHQgKiBSZWFkIG9uLWRpc2sgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggY3lsaW5kZXIgZ3JvdXBzXG4gNDUzOlx0ICovXG4gNDU0Olx0c3RhdGljIGludCB1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gNDU1Olx0e1xuIDQ1NjpcdFx0c3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0Ioc2IpO1xuIDQ1NzpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKnVzcGkgPSBzYmktXHUwMDNlc191c3BpO1xuIDQ1ODpcdFx0dW5zaWduZWQgY2hhciAqIGJhc2UsICogc3BhY2U7XG4gNDU5Olx0XHR1bnNpZ25lZCBzaXplLCBibGtzLCBpO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0VUZTRChcJiMzNDtFTlRFUlxcblwmIzM0Oyk7XG4gNDYyOlx0XG4gNDYzOlx0XHQvKlxuIDQ2NDpcdFx0ICogUmVhZCBjcyBzdHJ1Y3R1cmVzIGZyb20gKHVzdWFsbHkpIGZpcnN0IGRhdGEgYmxvY2tcbiA0NjU6XHRcdCAqIG9uIHRoZSBkZXZpY2UuIFxuIDQ2NjpcdFx0ICovXG4gNDY3Olx0XHRzaXplID0gdXNwaS1cdTAwM2VzX2Nzc2l6ZTtcbiA0Njg6XHRcdGJsa3MgPSAoc2l6ZSAmIzQzOyB1c3BpLVx1MDAzZXNfZnNpemUgLSAxKSBcdTAwM2VcdTAwM2UgdXNwaS1cdTAwM2VzX2ZzaGlmdDtcbiA0Njk6XHRcdGJhc2UgPSBzcGFjZSA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PRlMpO1xuIDQ3MDpcdFx0aWYgKCFiYXNlKVxuIDQ3MTpcdFx0XHRnb3RvIGZhaWxlZDsgXG4gNDcyOlx0XHRzYmktXHUwMDNlc19jc3AgPSAoc3RydWN0IHVmc19jc3VtICopc3BhY2U7XG4gNDczOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBibGtzOyBpJiM0MzsmIzQzOykge1xuIDQ3NDpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JfYnJlYWQoc2IsIHVzcGktXHUwMDNlc19jc2FkZHIgJiM0MzsgaSk7XG4gNDc1Olx0XHRcdGlmICghYmgpXG4gNDc2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG4gNDc3Olx0XHRcdG1lbWNweShzcGFjZSwgYmgtXHUwMDNlYl9kYXRhLCB1c3BpLVx1MDAzZXNfZnNpemUpO1xuIDQ3ODpcdFx0XHRzcGFjZSAmIzQzOz0gdXNwaS1cdTAwM2VzX2ZzaXplO1xuIDQ3OTpcdFx0XHRicmVsc2UgKGJoKTtcbiA0ODA6XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdC8qXG4gNDgzOlx0XHQgKiBSZWFkIGN5bGluZGVyIGdyb3VwICh3ZSByZWFkIG9ubHkgZmlyc3QgZnJhZ21lbnQgZnJvbSBibG9ja1xuIDQ4NDpcdFx0ICogYXQgdGhpcyB0aW1lKSBhbmQgcHJlcGFyZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgZm9yIGNnIGNhY2hpbmcuXG4gNDg1Olx0XHQgKi9cbiA0ODY6XHRcdHNiaS1cdTAwM2VzX3VjZyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdXNwaS1cdTAwM2VzX25jZywgR0ZQX05PRlMpO1xuIDQ4NzpcdFx0aWYgKCFzYmktXHUwMDNlc191Y2cpXG4gNDg4Olx0XHRcdGdvdG8gZmFpbGVkO1xuIDQ4OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdXNwaS1cdTAwM2VzX25jZzsgaSYjNDM7JiM0MzspIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB1ZnNfcmVhZF9jeWxpbmRlcmAgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHVmc19yZWFkX2N5bGluZGVyYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9wcyB1cCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY3lsaW5kZXIgZ3JvdXBzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGxvYWRpbmcuIEkga25vdyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBibG9jayBhbmQgZnJhZ21lbnQgYWxsb2NhdGlvbiwgYW5kIGFsc28gZGVhbGxvY2F0aW9uIG9yIGZyZWUgb3BlcmF0aW9ucy4gSXQmIzM5O3MgYWxzbyB1dGlsaXplZCB3aGVuIHdlJiMzOTtyZSByZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbSBpdHNlbGYuIEhtbSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gbWFrZSBzdXJlLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIGBmcy91ZnMvc3VwZXIuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGZzX3R5cGVgIGRlZmluaXRpb25zIGFuZCB3aGF0IG1vdW50IGNhbGxiYWNrcyB0aGF0IGZpbGUgaW1wbGVtZW50cy4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWZzX2ZzX3R5cGV8dWZzX2ZpbGxfc3VwZXJ8dWZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYz02OTk9c3RhdGljIHU2NCB1ZnNfbWF4X2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvdWZzL3N1cGVyLmMtNzE1LVxuZnMvdWZzL3N1cGVyLmM6NzE2OnN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdWZzL3N1cGVyLmMtNzE3LXtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDE5PXN0YXRpYyBpbnQgdWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3Vmcy9zdXBlci5jLTE0MjAte1xuZnMvdWZzL3N1cGVyLmM6MTQyMTpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCB1ZnNfZmlsbF9zdXBlcik7XG5mcy91ZnMvc3VwZXIuYy0xNDIyLX1cbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIHVmc19jb250ZXh0X29wcyA9IHtcbi0tXG5mcy91ZnMvc3VwZXIuYy0xNDM1LVxuZnMvdWZzL3N1cGVyLmM6MTQzNjpzdGF0aWMgaW50IHVmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdWZzL3N1cGVyLmMtMTQzNy17XG4tLVxuZnMvdWZzL3N1cGVyLmMtMTQ2MC1cbmZzL3Vmcy9zdXBlci5jOjE0NjE6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVmc19mc190eXBlID0ge1xuZnMvdWZzL3N1cGVyLmMtMTQ2Mi1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmZzL3Vmcy9zdXBlci5jLTE0NjQtXHQua2lsbF9zYlx0PSBraWxsX2Jsb2NrX3N1cGVyLFxuZnMvdWZzL3N1cGVyLmM6MTQ2NTpcdC5pbml0X2ZzX2NvbnRleHQgPSB1ZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvdWZzL3N1cGVyLmMtMTQ2Ni1cdC5wYXJhbWV0ZXJzXHQ9IHVmc19wYXJhbV9zcGVjLFxuLS1cbmZzL3Vmcy9zdXBlci5jPTE0NzE9c3RhdGljIGludCBfX2luaXQgaW5pdF91ZnNfZnModm9pZClcbi0tXG5mcy91ZnMvc3VwZXIuYy0xNDc1LVx0XHRnb3RvIG91dDE7XG5mcy91ZnMvc3VwZXIuYzoxNDc2Olx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZ1ZnNfZnNfdHlwZSk7XG5mcy91ZnMvc3VwZXIuYy0xNDc3LVx0aWYgKGVycilcbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDg2PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3Vmc19mcyh2b2lkKVxuZnMvdWZzL3N1cGVyLmMtMTQ4Ny17XG5mcy91ZnMvc3VwZXIuYzoxNDg4Olx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNnVmc19mc190eXBlKTtcbmZzL3Vmcy9zdXBlci5jLTE0ODktXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRlMgVnVsbmVyYWJpbGl0eTogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSBgdWZzX3JlYWRfY3lsaW5kZXIoKWAsIGlzIHZhbGlkYXRpbmcgdGhlIGN5bGluZGVyIGdyb3VwIGRhdGEgcmVhZCBmcm9tIGRpc2ssIGZvY3VzaW5nIG9uIHRoZSBmcmVlIGJpdG1hcCYjMzk7cyBpbnRlZ3JpdHkuIEl0JiMzOTtzIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGZyZWUgYml0bWFwIGRvbiYjMzk7dCBleGNlZWQgdGhlIGFsbG9jYXRlZCBidWZmZXIgc2l6ZS4gSWYgdGhleSBkbywgaXQmIzM5O3MgYSBjcml0aWNhbCBlcnJvciwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2hlbiB0aGUgZnJlZSBiaXRtYXAgaXMgbWFuaXB1bGF0ZWQuIFByZXR0eSBzdGFuZGFyZCBmaWxlc3lzdGVtIGVycm9yIGhhbmRsaW5nLCByZWFsbHkuCgpJcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5ISBGaWxlc3lzdGVtIGZ1enppbmcgaXMgYSBnb2xkIHN0YW5kYXJkIHRhcmdldCBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIgYW5kIHN5ei1jbHVzdGVyLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb3VudGluZyBjb3JydXB0ZWQgZGlzayBpbWFnZXMgYW5kIHBva2luZyBhdCB0aGUgZmlsZXN5c3RlbSBjb3JlIOKAkyBibG9jayBhbGxvY2F0aW9uLCBmaWxlIGNyZWF0aW9uLCBkZWxldGlvbiwgZXRjLiDigJMgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBBbmQgdGhpcyBwYXRjaCBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgVUZTIGxvZ2ljLgoKTm93LCB3aGVyZSBjYW4gd2UgZXZlbiBoaXQgdGhpcyBjb2RlPyBVRlMgaXMgYSBjb3JlIGZpbGVzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYENPTkZJR19VRlNfRlNgKSwgc28gdGhhdCYjMzk7cyBnb29kLiBJdCBjYW4gYmUgbW91bnRlZCBvbiBsb29wIGRldmljZXMgb3IgcmFtZGlza3Mgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBnaXZlcyB1cyBwbGVudHkgb2YgZmxleGliaWxpdHkuIFdlIG5lZWQgYENPTkZJR19VRlNfRlNgLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGBDT05GSUdfVUZTX0ZTX1dSSVRFYD8gRG9lcyByZWFkLXdyaXRlIGFjY2VzcyBpbnRyb2R1Y2UgbW9yZSBhdHRhY2sgc3VyZmFjZT8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXRoZXIgYHVmc19sb2FkX2N5bGluZGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVhZC1vbmx5ICphbmQqIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIGxvb2sgYXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjYWxscyBgdWZzX2xvYWRfY3lsaW5kZXJgIGFuZCBgdWZzX3JlYWRfY3lsaW5kZXJgLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNhbGxlcnMsIGluIGBiYWxsb2MuY2AsIGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gYHVmc19mcmVlX2ZyYWdtZW50c2AsIGB1ZnNfZnJlZV9ibG9ja3NgLCBgdWZzX2FkZF9mcmFnbWVudHNgLCBhbmQgYHVmc19hbGxvY19mcmFnbWVudHNgLiBUaGVuIGluIGBpYWxsb2MuY2AsIGB1ZnNfZnJlZV9pbm9kZWAsIGFuZCBgdWZzX25ld19pbm9kZWAuIEFuZCBmaW5hbGx5LCBpbiBgc3VwZXIuY2AsIHdlIGhhdmUgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgLiBIbW0sIGRvZXMgKnRoYXQqIGNhbGwgYHVmc19sb2FkX2N5bGluZGVyYD8gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc3VwZXIuY2AgcGF0aC4gU28gbWFueSB0aGluZ3MgdG91Y2hpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjI5OnN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuZnMvdWZzL2N5bGluZGVyLmM6OTI6XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuZnMvdWZzL2N5bGluZGVyLmMtOTMtXHRyZXR1cm4gZmFsc2U7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cdFx0fSBlbHNlIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTIxMy1cdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTQ1My0gKi9cbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XG4tLVxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyMTctXHRpZiAoIXNiX3Jkb25seShzYikpXG5mcy91ZnMvc3VwZXIuYzoxMjE4Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cdFx0XHRnb3RvIGZhaWxlZDtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMjkzLVx0XHR9XG5mcy91ZnMvc3VwZXIuYzoxMjk0Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XG5mcy91ZnMvc3VwZXIuYy0xMjk1LVx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVGUyBXcml0ZSBDYXBhYmlsaXR5KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIHRoZSBgQ09ORklHX1VGU19GU19XUklURWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMsIGRvZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbGxvdyBtZSB0byB3cml0ZSB0byBVRlMuIFNlY29uZGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucywgc28gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZnMvdWZzYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlIGFyZSBjb25kaXRpb25hbGl6ZWQgYmFzZWQgb24gdGhpcyBmbGFnLCB3aGljaCwgb2YgY291cnNlLCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzZXQsIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19VRlNfRlNfV1JJVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTczOC1cbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcbmZzL3Vmcy9zdXBlci5jLTc0MC1cdGlmICghc2JfcmRvbmx5KHNiKSkge1xuLS1cbmZzL3Vmcy9zdXBlci5jPTEyMzg9c3RhdGljIGludCB1ZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyNzktXHQgKi9cbmZzL3Vmcy9zdXBlci5jOjEyODA6I2lmbmRlZiBDT05GSUdfVUZTX0ZTX1dSSVRFXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVx0XHRwcl9lcnIoXCYjMzQ7dWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4mIzM5O3QgYmUgbW91bnRlZCBhcyByZWFkLXdyaXRlXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVUZTIFdyaXRlIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gaWYgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzbiYjMzk7dCBlbmFibGVkLCBVRlMgaXMgc3R1Y2sgaW4gcmVhZC1vbmx5IG1vZGUuIFRoYXQgbWFrZXMgc2Vuc2UuIFdoZW4gd2UmIzM5O3JlIG1vdW50aW5nIHJlYWQtd3JpdGUsIGB1ZnNfZmlsbF9zdXBlcmAga2lja3Mgb2ZmIHRoZSBwcm9jZXNzIGFuZCBjYWxscyBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AsIGFuZCB0aGluZ3MgbGlrZSBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgZGF0YSB3aWxsIHRoZW4gdXNlIGB1ZnNfbG9hZF9jeWxpbmRlcmAsIHdoaWNoIGNhbGxzIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIFJpZ2h0LCBzbyBib3RoIGBDT05GSUdfVUZTX0ZTYCBhbmQgYENPTkZJR19VRlNfRlNfV1JJVEVgIGFyZSBrZXkgZm9yIHRlc3RpbmcgVUZTIHdyaXRlIGFuZCB0aGVzZSBjeWxpbmRlciBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBzZXQgY29ycmVjdGx5LiBMb29raW5nIGF0IGBmcy91ZnMvS2NvbmZpZ2AsIEkgc2VlOgoKYGNvbmZpZyBVRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCBhbmQgc2VsZWN0cyBgQlVGRkVSX0hFQURgLgpgY29uZmlnIFVGU19GU19XUklURWAgZGVwZW5kcyBvbiBgVUZTX0ZTYC4KCmBCTE9DS2AgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlnLCBzbyB0aGF0IHNob3VsZG4mIzM5O3QgYmUgYW4gaXNzdWUuIFNvLCB0aGUga2V5IGNvbmZpZ3MgdG8gZW5hYmxlIGFyZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scy4gYHVmc19sb2FkX2N5bGluZGVyYCBpcyB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYHVmc19yZWFkX2N5bGluZGVyYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBvciByZWxhdGVkIG9uZXMuIExldCYjMzk7cyBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIGBmcy91ZnMvY3lsaW5kZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Vmcy9jeWxpbmRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9jeWxpbmRlci5jLTI4LSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL3Vmcy9jeWxpbmRlci5jLTMwLVx0dW5zaWduZWQgY2dubywgdW5zaWduZWQgYml0bWFwX25yKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTk5LSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6MTAwOnZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGJpdG1hcF9ucilcbmZzL3Vmcy9jeWxpbmRlci5jLTEwMS17XG4tLVxuZnMvdWZzL2N5bGluZGVyLmMtMTQzLSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6MTQ0OnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuZnMvdWZzL2N5bGluZGVyLmMtMTQ1LVx0c3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGNnbm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTM5CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVUZTIEN5bGluZGVyIEdyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcHV0X2N5bGluZGVyYCByZXNpZGUgd2l0aGluIGBjeWxpbmRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwYXRjaCBtb2RpZnlpbmcgdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gYHVmc19yZWFkX2N5bGluZGVyYCwgd2hpY2ggYHVmc19sb2FkX2N5bGluZGVyYCBkaXJlY3RseSBjYWxscywgdGhhdCBkZWZpbml0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLgoKVG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBJJiMzOTttIGNoZWNraW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5IHRoYXQgZGVhbCB3aXRoIGN5bGluZGVyIGdyb3Vwczogc3BlY2lmaWNhbGx5IGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19hbGxvY19mcmFnbWVudHNgLCBgdWZzX25ld19mcmFnbWVudHNgLCBgdWZzX25ld19pbm9kZWAsIGFuZCBgdWZzX2ZyZWVfaW5vZGVgLiBJIGhhZCB0byBjb25maXJtIHRoYXQgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIGluIGBzdXBlci5jYCBpcyBzdGF0aWMgKGl0IGlzISkgYW5kIHRoZSBzYW1lIGZvciBgdWZzX2ZpbGxfc3VwZXJgLiBTbyB0aGF0IHJ1bGVzIHRob3NlIG91dCBvZiBteSBjb3JlIGludGVyZXN0LgoKVGhlcmVmb3JlLCBgdWZzX2xvYWRfY3lsaW5kZXJgLCBgdWZzX2ZyZWVfZnJhZ21lbnRzYCwgYHVmc19mcmVlX2Jsb2Nrc2AsIGB1ZnNfbmV3X2lub2RlYCwgYW5kIGB1ZnNfZnJlZV9pbm9kZWAgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBhbmFseXNpcy4gQmVjYXVzZSBgdWZzX2xvYWRfY3lsaW5kZXJgICpkaXJlY3RseSogY2FsbHMgdGhlIG1vZGlmaWVkIGB1ZnNfcmVhZF9jeWxpbmRlcmAgZnVuY3Rpb24sIGl0JiMzOTtzIHRoZSBtb3N0IGRpcmVjdCBub24tc3RhdGljIHN5bWJvbCBvZiBpbnRlcmVzdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdmVyaWZ5IGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlsczogdGhlIGZ1enppbmcgaXMgY29uc2lkZXJlZCB3b3J0aHdoaWxlIChgV29ydGhGdXp6aW5nOiB0cnVlYCkgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgKGBVRlNfRlNgLCBgVUZTX0ZTX1dSSVRFYCkuIFRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGNvdWxkIGJlIGFsbCBvZiB0aG9zZSBtZW50aW9uZWQsIG9yIEkgY2FuIGZvY3VzIG9uIGB1ZnNfbG9hZF9jeWxpbmRlcmAgYWxvbmUgdG8gbmFycm93IHRoaW5ncy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VUZTX0ZTJiMzNDssCiAgICAmIzM0O1VGU19GU19XUklURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Vmc19sb2FkX2N5bGluZGVyJiMzNDssCiAgICAmIzM0O3Vmc19uZXdfaW5vZGUmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfaW5vZGUmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfZnJhZ21lbnRzJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB1ZnNfcmVhZF9jeWxpbmRlcigpIGluIHRoZSBVRlMgZmlsZXN5c3RlbSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhhdCBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcHMgZml0IHdpdGhpbiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIG1vdW50aW5nIGFuZCBtb2RpZnlpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGxvb3AgZGV2aWNlcyBvciBkaXNrIGltYWdlcyBhbmQgaXMgd2VsbCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWZzX2xvYWRfY3lsaW5kZXImIzM0OywKICAgICYjMzQ7dWZzX25ld19pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9mcmFnbWVudHMmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDZhYzg0YjQxYzNmYmQ3NDM0OWRjZTBiMDA4YzMzZjAzZGNlMmU2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6MjM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy91ZnMvY3lsaW5kZXIuYyBiL2ZzL3Vmcy9jeWxpbmRlci5jCmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9jeWxpbmRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy9jeWxpbmRlci5jCkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTsKIAlzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVjcGk7CiAJc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZzsKJiM0MzsJdTY0IGNnX2J5dGVzLCBmcmVlX2JpdG1hcF9ieXRlczsKJiM0MzsJY29uc3QgY2hhciAqZXJyOwogCXVuc2lnbmVkIGksIGo7CiAKIAlVRlNEKCYjMzQ7RU5URVIsIGNnbm8gJXUsIGJpdG1hcF9uciAldVxuJiMzNDssIGNnbm8sIGJpdG1hcF9ucik7CkBAIC00OCw4ICYjNDM7NTAsMTAgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbMF0gPSBzYmktJmd0O3NfdWNnW2Nnbm9dOwogCWZvciAoaSA9IDE7IGkgJmx0OyBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiAJCVVDUElfVUJIKHVjcGkpLSZndDtiaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7ZnJhZ21lbnQgJiM0MzsgaSk7Ci0JCWlmICghVUNQSV9VQkgodWNwaSktJmd0O2JoW2ldKQomIzQzOwkJaWYgKCFVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbaV0pIHsKJiM0MzsJCQllcnIgPSAmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1JiMzNDs7CiAJCQlnb3RvIGZhaWxlZDsKJiM0MzsJCX0KIAl9CiAJc2JpLSZndDtzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87CiAJCQkKQEAgLTY4LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXVjcGktJmd0O2NfY2x1c3RlcnN1bW9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctJmd0O2NnX3UuY2dfNDQuY2dfY2x1c3RlcnN1bW9mZik7CiAJdWNwaS0mZ3Q7Y19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTsKIAl1Y3BpLSZndDtjX25jbHVzdGVyYmxrcyA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctJmd0O2NnX3UuY2dfNDQuY2dfbmNsdXN0ZXJibGtzKTsKJiM0MzsKJiM0MzsJY2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Y291bnQgKiBzYi0mZ3Q7c19ibG9ja3NpemU7CiYjNDM7CWZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktJmd0O3NfZnBnKTsKJiM0MzsJLyogVGhlIGZ1bGwgZnJlZSBiaXRtYXAgbXVzdCBmaXQgaW4gdGhlIGxvYWRlZCBDRyBidWZmZXIuICovCiYjNDM7CWlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHwKJiM0MzsJICAgICh1NjQpdWNwaS0mZ3Q7Y19mcmVlb2ZmICYjNDM7IGZyZWVfYml0bWFwX2J5dGVzICZndDsgY2dfYnl0ZXMpIHsKJiM0MzsJCWVyciA9ICYjMzQ7Y3lsaW5kZXIgZ3JvdXAgJXUgaGFzIGludmFsaWQgZnJlZSBiaXRtYXAmIzM0OzsKJiM0MzsJCWdvdG8gZmFpbGVkOwomIzQzOwl9CiYjNDM7CiAJVUZTRCgmIzM0O0VYSVRcbiYjMzQ7KTsKIAlyZXR1cm4gdHJ1ZTsKIAkKQEAgLTc1LDcgJiM0Mzs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJZm9yIChqID0gMTsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQogCQlicmVsc2UoVUNQSV9VQkgodWNwaSktJmd0O2JoW2pdKTsKIAlzYmktJmd0O3NfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7Ci0JdWZzX2Vycm9yIChzYiwgJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LCAmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1JiMzNDssIGNnbm8pOwomIzQzOwl1ZnNfZXJyb3Ioc2IsICYjMzQ7dWZzX3JlYWRfY3lsaW5kZXImIzM0OywgZXJyLCBjZ25vKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBhIHBhdGNoIGZvciBgZnMvdWZzL2N5bGluZGVyLmNgLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgaXQgZG9lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgVUZTIGZpbGVzeXN0ZW0uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGN5bGluZGVyIGdyb3VwcyBhcmUgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVUZTLCBzbyB0aGlzIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpUaGUgZGlmZiBpdHNlbGYgcHJvdmlkZXMgdGhlIGZpcnN0IGNsdWUuIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBkZWFscyB3aXRoIHJlYWRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGRpc2suIFRoZSBhZGRlZCBjb2RlIGludHJvZHVjZXMgdHdvIG5ldyB2YXJpYWJsZXMsIGBjZ19ieXRlc2AgYW5kIGBmcmVlX2JpdG1hcF9ieXRlc2AsIGJvdGggb2Ygd2hpY2ggYXJlIG9mIHR5cGUgYHU2NGAuIEkgc3VzcGVjdCB0aGVzZSB3aWxsIGJlIHVzZWQgZm9yIHNvbWUgY3J1Y2lhbCBzaXplIGNoZWNrcy4gVGhlIHZhcmlhYmxlIGBlcnJgIG9mIHR5cGUgYGNvbnN0IGNoYXIgKmAgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYWRkZWQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgYSBuZXcgdmFsaWRhdGlvbiBzdGVwLiBUaGUgcGF0Y2ggbm93IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIGN5bGluZGVyIGdyb3VwIGluIGJ5dGVzIChgY2dfYnl0ZXNgKSBhbmQgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGZyZWUgYml0bWFwIChgZnJlZV9iaXRtYXBfYnl0ZXNgKS4gVGhlIGBCSVRTX1RPX0JZVEVTYCBtYWNybyBpcyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjYWxjdWxhdGluZyB0aGUgc2l6ZSBpbiBieXRlcyBmcm9tIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgYml0bWFwLCB3aGljaCBpcyBxdWl0ZSBjb21tb24gZm9yIHRoaXMgdHlwZSBvZiBhbGxvY2F0aW9uIGRhdGEuCgpUaGUgc3Vic2VxdWVudCBgaWZgIHN0YXRlbWVudCBpcyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBraWNrcyBpbi4gSXQgY2hlY2tzIGlmIHRoZSBgZnJlZV9iaXRtYXBfYnl0ZXNgIGlzIHZhbGlkIGFuZCBpZiB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBmcmVlIGJpdG1hcCBwbHVzIGl0cyBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlci4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgbWFsZm9ybWVkIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMuIFRoZSBgZXJyYCB2YXJpYWJsZSwgd2hpY2ggd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGlmIHN0YXRlbWVudCBpcyB0cnVlLCB3aWxsIGFsc28gYmUgcGFzc2VkIGludG8gdGhlIGB1ZnNfZXJyb3JgIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIHNvbWUgbW9yZSBkZXRhaWxlZCBhbmQgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMgYXMgY29tcGFyZWQgdG8gdGhlIG9uZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW4gdGhlIGNvZGUuCgpHaXZlbiBteSBrbm93bGVkZ2Ugb2YgVUZTLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgZmlsZXMuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIGNhbGxlZCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgcmVseSBvbiB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hlY2tzIGJlaW5nIGRvbmUuIEkgc2hvdWxkIGtub3cgd2hhdCBpbXBhY3QgdGhlIGNoYW5nZXMgbWF5IGhhdmUgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL2N5bGluZGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDk1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGxpbnV4L2ZzL3Vmcy9jeWxpbmRlci5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDE5OThcbiAgIDY6XHQgKiBEYW5pZWwgUGlya2wgXHUwMDNjZGFuaWVsLnBpcmtsQGVtYWlsLmN6XHUwMDNlXG4gICA3Olx0ICogQ2hhcmxlcyBVbml2ZXJzaXR5LCBGYWN1bHR5IG9mIE1hdGhlbWF0aWNzIGFuZCBQaHlzaWNzXG4gICA4Olx0ICpcbiAgIDk6XHQgKiAgZXh0MiAtIGlub2RlIChibG9jaykgYml0bWFwIGNhY2hpbmcgaW5zcGlyZWRcbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2FzbS9ieXRlb3JkZXIuaFx1MDAzZVxuICAxOTpcdFxuICAyMDpcdCNpbmNsdWRlIFwmIzM0O3Vmc19mcy5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7dWZzLmhcJiMzNDtcbiAgMjI6XHQjaW5jbHVkZSBcJiMzNDtzd2FiLmhcJiMzNDtcbiAgMjM6XHQjaW5jbHVkZSBcJiMzNDt1dGlsLmhcJiMzNDtcbiAgMjQ6XHRcbiAgMjU6XHQvKlxuICAyNjpcdCAqIFJlYWQgY3lsaW5kZXIgZ3JvdXAgaW50byBjYWNoZS4gVGhlIG1lbW9yeSBzcGFjZSBmb3IgdWZzX2NnX3ByaXZhdGVfaW5mb1xuICAyNzpcdCAqIHN0cnVjdHVyZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdWZzX3JlYWRfc3VwZXIuXG4gIDI4Olx0ICovXG4gIDI5Olx0c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiAgMzA6XHRcdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbiAgMzE6XHR7XG4gIDMyOlx0XHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xuICAzMzpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuICAzNDpcdFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuICAzNTpcdFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcbiAgMzY6XHRcdHU2NCBjZ19ieXRlcywgZnJlZV9iaXRtYXBfYnl0ZXM7XG4gIDM3Olx0XHRjb25zdCBjaGFyICplcnI7XG4gIDM4Olx0XHR1bnNpZ25lZCBpLCBqO1xuICAzOTpcdFxuICA0MDpcdFx0VUZTRChcJiMzNDtFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxuXCYjMzQ7LCBjZ25vLCBiaXRtYXBfbnIpO1xuICA0MTpcdFx0dXNwaSA9IHNiaS1cdTAwM2VzX3VzcGk7XG4gIDQyOlx0XHR1Y3BpID0gc2JpLVx1MDAzZXNfdWNwaVtiaXRtYXBfbnJdO1xuICA0MzpcdFx0dWNnID0gKHN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgKilzYmktXHUwMDNlc191Y2dbY2dub10tXHUwMDNlYl9kYXRhO1xuICA0NDpcdFxuICA0NTpcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlZnJhZ21lbnQgPSB1ZnNfY2djbWluKGNnbm8pO1xuICA0NjpcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQgPSB1c3BpLVx1MDAzZXNfY2dzaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuICA0NzpcdFx0LypcbiAgNDg6XHRcdCAqIFdlIGhhdmUgYWxyZWFkeSB0aGUgZmlyc3QgZnJhZ21lbnQgb2YgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgaW4gYnVmZmVyXG4gIDQ5Olx0XHQgKi9cbiAgNTA6XHRcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoWzBdID0gc2JpLVx1MDAzZXNfdWNnW2Nnbm9dO1xuICA1MTpcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgVUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gIDUyOlx0XHRcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLVx1MDAzZWZyYWdtZW50ICYjNDM7IGkpO1xuICA1MzpcdFx0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKSB7XG4gIDU0Olx0XHRcdFx0ZXJyID0gXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcJiMzNDs7XG4gIDU1Olx0XHRcdFx0Z290byBmYWlsZWQ7XG4gIDU2Olx0XHRcdH1cbiAgNTc6XHRcdH1cbiAgNTg6XHRcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87XG4gIDU5Olx0XHRcdFx0XG4gIDYwOlx0XHR1Y3BpLVx1MDAzZWNfY2d4XHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfY2d4KTtcbiAgNjE6XHRcdHVjcGktXHUwMDNlY19uY3lsXHQ9IGZzMTZfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfbmN5bCk7XG4gIDYyOlx0XHR1Y3BpLVx1MDAzZWNfbmlibGtcdD0gZnMxNl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19uaWJsayk7XG4gIDYzOlx0XHR1Y3BpLVx1MDAzZWNfbmRibGtcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19uZGJsayk7XG4gIDY0Olx0XHR1Y3BpLVx1MDAzZWNfcm90b3JcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19yb3Rvcik7XG4gIDY1Olx0XHR1Y3BpLVx1MDAzZWNfZnJvdG9yXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfZnJvdG9yKTtcbiAgNjY6XHRcdHVjcGktXHUwMDNlY19pcm90b3JcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19pcm90b3IpO1xuICA2NzpcdFx0dWNwaS1cdTAwM2VjX2J0b3RvZmZcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19idG90b2ZmKTtcbiAgNjg6XHRcdHVjcGktXHUwMDNlY19ib2ZmXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfYm9mZik7XG4gIDY5Olx0XHR1Y3BpLVx1MDAzZWNfaXVzZWRvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX2l1c2Vkb2ZmKTtcbiAgNzA6XHRcdHVjcGktXHUwMDNlY19mcmVlb2ZmXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfZnJlZW9mZik7XG4gIDcxOlx0XHR1Y3BpLVx1MDAzZWNfbmV4dGZyZWVvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX25leHRmcmVlb2ZmKTtcbiAgNzI6XHRcdHVjcGktXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xuICA3MzpcdFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3Rlcm9mZik7XG4gIDc0Olx0XHR1Y3BpLVx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XG4gIDc1Olx0XG4gIDc2Olx0XHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50ICogc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gIDc3Olx0XHRmcmVlX2JpdG1hcF9ieXRlcyA9IEJJVFNfVE9fQllURVMoKHU2NCl1c3BpLVx1MDAzZXNfZnBnKTtcbiAgNzg6XHRcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuICA3OTpcdFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxuICA4MDpcdFx0ICAgICh1NjQpdWNwaS1cdTAwM2VjX2ZyZWVvZmYgJiM0MzsgZnJlZV9iaXRtYXBfYnl0ZXMgXHUwMDNlIGNnX2J5dGVzKSB7XG4gIDgxOlx0XHRcdGVyciA9IFwmIzM0O2N5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXCYjMzQ7O1xuICA4MjpcdFx0XHRnb3RvIGZhaWxlZDtcbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gIDg2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgODc6XHRcdFxuICA4ODpcdGZhaWxlZDpcbiAgODk6XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuICA5MDpcdFx0XHRicmVsc2UoVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbal0pO1xuICA5MTpcdFx0c2JpLVx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XG4gIDkyOlx0XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuICA5MzpcdFx0cmV0dXJuIGZhbHNlO1xuICA5NDpcdH1cbiAgOTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBzYW5pdHkgY2hlY2sgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYHVmc19yZWFkX2N5bGluZGVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBwYXRjaOKAmXMgaW1wYWN0LCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIHNwZWNpZmljYWxseSwgS01TQU4uIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBvbiBgdWNwaS0mZ3Q7Y19mcmVlb2ZmYCBhbmQgdGhlIGNhbGN1bGF0ZWQgYGZyZWVfYml0bWFwX2J5dGVzYCBhZ2FpbnN0IHRoZSBidWZmZXIgc2l6ZSBgY2dfYnl0ZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtib3VuZHMgY2hlY2ssJiMzNDsgd2hpY2ggaXMgZXhjZWxsZW50LgoKSSByYW4gdGhyb3VnaCB0aGUgc2NlbmFyaW9zIGluIG15IGhlYWQuIEZpcnN0LCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgYWx3YXlzIHNldCBiZWZvcmUgYW55IHBvdGVudGlhbCBlcnJvciByZXR1cm4gdmlhIGBnb3RvIGZhaWxlZGAuIFNlY29uZCwgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2Yga2VybmVsIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciB3aW4uIFRoZSBjb2RlIGRvZXNuJiMzOTt0IHRvdWNoIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLiBUaGlyZCwgdGhlIGJyYW5jaGluZyBsb2dpYyBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsc28gZ29vZC4gRm91cnRoLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGFyZSBzYWZlIHRoZXJlLgoKVGhhdCYjMzk7cyB3aGVuIEkgem9vbWVkIGluIG9uIHRoZSBib3VuZHMgY2hlY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGVuc3VyaW5nIHRoYXQgYWNjZXNzaW5nIHRoZSBmcmVlIGJpdG1hcCBkb2VzbiYjMzk7dCBnbyBiZXlvbmQgYGNnX2J5dGVzYC4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbiB0aGF0IEtBU0FOIGV4Y2VscyBhdCBkZXRlY3RpbmcuIEl0IGRpcmVjdGx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgZXhhY3RseSB0aGUgdHlwZSBvZiBidWcgS0FTQU4gaXMgYnVpbHQgdG8gZmluZC4KCkkgZG91YmxlLWNoZWNrZWQ6IEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBsZWFrcy4gVGhpcyBidWcgaXMgZXhwbGljaXRseSBhYm91dCBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgYSBzcGF0aWFsIHNhZmV0eSBpc3N1ZS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uLCByZWFkaW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpUbyBzb2xpZGlmeSB0aGlzIGNvbmNsdXNpb24sIEkgcHJlcGFyZWQgYSBjbGVhciByZWFzb25pbmcgc3VtbWFyeS4gVGhpcyBwYXRjaCB2YWxpZGF0ZXMgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcCBhZ2FpbnN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNpemUuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSBjb3JydXB0ZWQgVUZTIGltYWdlcy4gVGhpcyBraW5kIG9mIGFjY2VzcyBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBpbnRlbmRlZCBmb3IuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdmFsaWRhdGlvbiBpbiBgdWZzX3JlYWRfY3lsaW5kZXIoKWAgdG8gdmVyaWZ5IHRoYXQgdGhlIGN5bGluZGVyIGdyb3VwIGZyZWUgYmxvY2sgYml0bWFwIChgY19mcmVlb2ZmYCBwbHVzIGBmcmVlX2JpdG1hcF9ieXRlc2ApIGRvZXMgbm90IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyIChgY2dfYnl0ZXNgKS4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBjeWxpbmRlciBncm91cCBkYXRhIGZyb20gYSBjcmFmdGVkL2NvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlLlxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB2YWxpZGF0aW9uIGluIGB1ZnNfcmVhZF9jeWxpbmRlcigpYCB0byB2ZXJpZnkgdGhhdCB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBibG9jayBiaXRtYXAgKGBjX2ZyZWVvZmZgIHBsdXMgYGZyZWVfYml0bWFwX2J5dGVzYCkgZG9lcyBub3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIgKGBjZ19ieXRlc2ApLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGN5bGluZGVyIGdyb3VwIGRhdGEgZnJvbSBhIGNyYWZ0ZWQvY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2UuXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGVycm9ycyBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjAyLjIzMTM1ODMzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDYwMzcxNDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVmc19sb2FkX2N5bGluZGVyXCIsXG4gICAgXCJ1ZnNfbmV3X2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfZnJhZ21lbnRzXCIsXG4gICAgXCJ1ZnNfZnJlZV9ibG9ja3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdmFsaWRhdGlvbiBpbiBgdWZzX3JlYWRfY3lsaW5kZXIoKWAgdG8gdmVyaWZ5IHRoYXQgdGhlIGN5bGluZGVyIGdyb3VwIGZyZWUgYmxvY2sgYml0bWFwIChgY19mcmVlb2ZmYCBwbHVzIGBmcmVlX2JpdG1hcF9ieXRlc2ApIGRvZXMgbm90IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyIChgY2dfYnl0ZXNgKS4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBjeWxpbmRlciBncm91cCBkYXRhIGZyb20gYSBjcmFmdGVkL2NvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlLlxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGVycm9ycyBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDIuMjMxMzYzNjA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI3OTI1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MjM6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL2N5bGluZGVyLmMgYi9mcy91ZnMvY3lsaW5kZXIuY1xcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XFxuLS0tIGEvZnMvdWZzL2N5bGluZGVyLmNcXG4rKysgYi9mcy91ZnMvY3lsaW5kZXIuY1xcbkBAIC0zMyw2ICszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcXG4gXFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xcbiBcXHRzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnO1xcbitcXHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xcbitcXHRjb25zdCBjaGFyICplcnI7XFxuIFxcdHVuc2lnbmVkIGksIGo7XFxuIFxcbiBcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxcXG5cXFwiLCBjZ25vLCBiaXRtYXBfbnIpO1xcbkBAIC00OCw4ICs1MCwxMCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbMF0gPSBzYmktXFx1MDAzZXNfdWNnW2Nnbm9dO1xcbiBcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgVUNQSV9VQkgodWNwaSktXFx1MDAzZWNvdW50OyBpKyspIHtcXG4gXFx0XFx0VUNQSV9VQkgodWNwaSktXFx1MDAzZWJoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLVxcdTAwM2VmcmFnbWVudCArIGkpO1xcbi1cXHRcXHRpZiAoIVVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtpXSlcXG4rXFx0XFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbaV0pIHtcXG4rXFx0XFx0XFx0ZXJyID0gXFxcImNhbid0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcXFwiO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xcbiBcXHRcXHRcXHRcXG5AQCAtNjgsNiArNzIsMTYgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTtcXG4gXFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcXG4gXFx0dWNwaS1cXHUwMDNlY19uY2x1c3RlcmJsa3MgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XFxuK1xcbitcXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCAqIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4rXFx0ZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS1cXHUwMDNlc19mcGcpO1xcbitcXHQvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi9cXG4rXFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxcbitcXHQgICAgKHU2NCl1Y3BpLVxcdTAwM2VjX2ZyZWVvZmYgKyBmcmVlX2JpdG1hcF9ieXRlcyBcXHUwMDNlIGNnX2J5dGVzKSB7XFxuK1xcdFxcdGVyciA9IFxcXCJjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcFxcXCI7XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbitcXHR9XFxuK1xcbiBcXHRVRlNEKFxcXCJFWElUXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcbkBAIC03NSw3ICs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdGZvciAoaiA9IDE7IGogXFx1MDAzYyBpOyBqKyspXFxuIFxcdFxcdGJyZWxzZShVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbal0pO1xcbiBcXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuLVxcdHVmc19lcnJvciAoc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIFxcXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XFxcIiwgY2dubyk7XFxuK1xcdHVmc19lcnJvcihzYiwgXFxcInVmc19yZWFkX2N5bGluZGVyXFxcIiwgZXJyLCBjZ25vKTtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzowMi41NzQ3OTM2MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzMzI3MzI0MTc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVmc19sb2FkX2N5bGluZGVyXCIsXG4gICAgXCJ1ZnNfbmV3X2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfZnJhZ21lbnRzXCIsXG4gICAgXCJ1ZnNfZnJlZV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB1ZnNfcmVhZF9jeWxpbmRlcigpIGluIHRoZSBVRlMgZmlsZXN5c3RlbSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhhdCBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcHMgZml0IHdpdGhpbiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIG1vdW50aW5nIGFuZCBtb2RpZnlpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGxvb3AgZGV2aWNlcyBvciBkaXNrIGltYWdlcyBhbmQgaXMgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzoyMzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmNcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XG4tLS0gYS9mcy91ZnMvY3lsaW5kZXIuY1xuKysrIGIvZnMvdWZzL2N5bGluZGVyLmNcbkBAIC0zMyw2ICszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqIHVzcGk7XG4gXHRzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVjcGk7XG4gXHRzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnO1xuK1x0dTY0IGNnX2J5dGVzLCBmcmVlX2JpdG1hcF9ieXRlcztcbitcdGNvbnN0IGNoYXIgKmVycjtcbiBcdHVuc2lnbmVkIGksIGo7XG4gXG4gXHRVRlNEKFwiRU5URVIsIGNnbm8gJXUsIGJpdG1hcF9uciAldVxcblwiLCBjZ25vLCBiaXRtYXBfbnIpO1xuQEAgLTQ4LDggKzUwLDEwIEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFswXSA9IHNiaS1cdTAwM2VzX3VjZ1tjZ25vXTtcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50OyBpKyspIHtcbiBcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlYmhbaV0gPSBzYl9icmVhZChzYiwgVUNQSV9VQkgodWNwaSktXHUwMDNlZnJhZ21lbnQgKyBpKTtcbi1cdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSlcbitcdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSkge1xuK1x0XHRcdGVyciA9IFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVwiO1xuIFx0XHRcdGdvdG8gZmFpbGVkO1xuK1x0XHR9XG4gXHR9XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xuIFx0XHRcdFxuQEAgLTY4LDYgKzcyLDE2IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHR1Y3BpLVx1MDAzZWNfY2x1c3RlcnN1bW9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTtcbiBcdHVjcGktXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJvZmYpO1xuIFx0dWNwaS1cdTAwM2VjX25jbHVzdGVyYmxrcyA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpO1xuK1xuK1x0Y2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2Vjb3VudCAqIHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0ZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS1cdTAwM2VzX2ZwZyk7XG4rXHQvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi9cbitcdGlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHxcbitcdCAgICAodTY0KXVjcGktXHUwMDNlY19mcmVlb2ZmICsgZnJlZV9iaXRtYXBfYnl0ZXMgXHUwMDNlIGNnX2J5dGVzKSB7XG4rXHRcdGVyciA9IFwiY3lsaW5kZXIgZ3JvdXAgJXUgaGFzIGludmFsaWQgZnJlZSBiaXRtYXBcIjtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4rXG4gXHRVRlNEKFwiRVhJVFxcblwiKTtcbiBcdHJldHVybiB0cnVlO1xuIFx0XG5AQCAtNzUsNyArODksNyBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgaTsgaisrKVxuIFx0XHRicmVsc2UoVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbal0pO1xuIFx0c2JpLVx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XG4tXHR1ZnNfZXJyb3IgKHNiLCBcInVmc19yZWFkX2N5bGluZGVyXCIsIFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVwiLCBjZ25vKTtcbitcdHVmc19lcnJvcihzYiwgXCJ1ZnNfcmVhZF9jeWxpbmRlclwiLCBlcnIsIGNnbm8pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjAyLjU3NDc5NTEyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDg4ODQyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBVRlMgQ3lsaW5kZXIgUmVhZCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBwaW5wb2ludGVkIHJpZ2h0IHRoZXJlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBjbG9zZWx5IGV4YW1pbmluZyBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB0aGVuIGJyb2FkZW4gbXkgdmlldyB0byB0aGUgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5LiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcywgYW5kIGFsc28gc2VlIHdoYXQga2V5IHN5bWJvbHMgYXJlIGF0IHBsYXkuIEJhc2ljYWxseSwgSSdtIHRyeWluZyB0byBlc3RhYmxpc2ggdGhlIHBhdGNoJ3MgY29udGV4dCB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLlxuXG5UbyBzcGVlZCB0aGluZ3MgdXAsIEknbGwgbGV2ZXJhZ2UgdGhlIHRvb2xzIEknbSB1c2VkIHRvOiBhIGdvb2QgZmlsZSByZWFkZXIgb3IgYGdyZXBgIGlzIGVzc2VudGlhbCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29kZSBzZWN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2Ugc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFyZSByZWxhdGVkLiBNeSBnb2FsIGlzIHRvIHJhcGlkbHkgYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDcuNjIzNjgxNzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDE4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc19yZWFkX2N5bGluZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoyOTpzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL3Vmcy9jeWxpbmRlci5jLTMwLVxcdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTkxLVxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTtcXG5mcy91ZnMvY3lsaW5kZXIuYzo5MjpcXHR1ZnNfZXJyb3Ioc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIGVyciwgY2dubyk7XFxuZnMvdWZzL2N5bGluZGVyLmMtOTMtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMTc2LVxcdFxcdH0gZWxzZSB7XFxuZnMvdWZzL2N5bGluZGVyLmM6MTc3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCBjZ25vKSkpIHtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0yMTMtXFx0XFx0c2JpLVxcdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xcbmZzL3Vmcy9jeWxpbmRlci5jOjIxNDpcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgMCkpKSB7XFxuZnMvdWZzL2N5bGluZGVyLmMtMjE1LVxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbi0tXFxuZnMvdWZzL3N1cGVyLmM9NDIwPXN0YXRpYyB2b2lkIHVmc19zZXR1cF9jc3RvdGFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy91ZnMvc3VwZXIuYy00NTMtICovXFxuZnMvdWZzL3N1cGVyLmM6NDU0OnN0YXRpYyBpbnQgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz03MTY9c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy91ZnMvc3VwZXIuYy0xMjE3LVxcdGlmICghc2JfcmRvbmx5KHNiKSlcXG5mcy91ZnMvc3VwZXIuYzoxMjE4OlxcdFxcdGlmICghdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzYikpXFxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTEyMzg9c3RhdGljIGludCB1ZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTI5My1cXHRcXHR9XFxuZnMvdWZzL3N1cGVyLmM6MTI5NDpcXHRcXHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XFxuZnMvdWZzL3N1cGVyLmMtMTI5NS1cXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCBkdXJpbmcgcmVtb3VudGluZ1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjA3LjY2ODEwNDE4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyNzQ5NzU2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVUZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmaWxlczogSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmcy91ZnMvS2NvbmZpZ2AgdG8gbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBVRlMuIFRoaXMgd2lsbCBzaG93IG1lIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaG93IHRoZXkncmUgZXhwb3NlZCB0byB0aGUgdXNlci4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRlMgbW9kdWxlIGdldHMgYnVpbHQsIHNvIHRoZSBgZnMvdWZzL01ha2VmaWxlYCBpcyB0aGUgbmV4dCB0YXJnZXQuIFRoYXQgZmlsZSB3aWxsIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgY29tcGlsaW5nIHRoZSBVRlMgY29kZSBpbnRvIHRoZSBrZXJuZWwuIFRoZXNlIHR3byBmaWxlcyB0b2dldGhlciBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjE1Ljk0MzA4MTU4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVUZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgQlNEIGFuZCBkZXJpdmF0ZSB2ZXJzaW9ucyBvZiBVbml4IChzdWNoIGFzIFN1bk9TLCBGcmVlQlNELCBOZXRCU0QsXFxuICAgODpcXHRcXHQgIE9wZW5CU0QgYW5kIE5lWFRzdGVwKSB1c2UgYSBmaWxlIHN5c3RlbSBjYWxsZWQgVUZTLiBTb21lIFN5c3RlbSBWXFxuICAgOTpcXHRcXHQgIFVuaXhlcyBjYW4gY3JlYXRlIGFuZCBtb3VudCBoYXJkIGRpc2sgcGFydGl0aW9ucyBhbmQgZGlza2V0dGVzIHVzaW5nXFxuICAxMDpcXHRcXHQgIHRoaXMgZmlsZSBzeXN0ZW0gYXMgd2VsbC4gU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byByZWFkIGZyb21cXG4gIDExOlxcdFxcdCAgdGhlc2UgcGFydGl0aW9uczsgaWYgeW91IGFsc28gd2FudCB0byB3cml0ZSB0byB0aGVtLCBzYXkgWSB0byB0aGVcXG4gIDEyOlxcdFxcdCAgZXhwZXJpbWVudGFsIFxcXCJVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydFxcXCIsIGJlbG93LiBQbGVhc2UgcmVhZCB0aGVcXG4gIDEzOlxcdFxcdCAgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3Vmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHQgICAgICAgICAgVGhlIHJlY2VudGx5IHJlbGVhc2VkIFVGUzIgdmFyaWFudCAodXNlZCBpbiBGcmVlQlNEIDUueCkgaXNcXG4gIDE2OlxcdCAgICAgICAgICBSRUFELU9OTFkgc3VwcG9ydGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBnZW5lcmFsbHkgbm90IG5lZWRlZCBmb3IgZmxvcHBpZXMsIHNpbmNlIGFcXG4gIDE5OlxcdFxcdCAgZ29vZCBwb3J0YWJsZSB3YXkgdG8gdHJhbnNwb3J0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBiZXR3ZWVuIHVuaXhlc1xcbiAgMjA6XFx0XFx0ICAoYW5kIGV2ZW4gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpIGlzIGdpdmVuIGJ5IHRoZSB0YXIgcHJvZ3JhbSAoXFxcIm1hblxcbiAgMjE6XFx0XFx0ICB0YXJcXFwiIG9yIHByZWZlcmFibHkgXFxcImluZm8gdGFyXFxcIikuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgV2hlbiBhY2Nlc3NpbmcgTmVYVHN0ZXAgZmlsZXMsIHlvdSBtYXkgbmVlZCB0byBjb252ZXJ0IHRoZW0gZnJvbSB0aGVcXG4gIDI0OlxcdFxcdCAgTmVYVCBjaGFyYWN0ZXIgc2V0IHRvIHRoZSBMYXRpbjEgY2hhcmFjdGVyIHNldDsgdXNlIHRoZSBwcm9ncmFtXFxuICAyNTpcXHRcXHQgIHJlY29kZSAoXFxcImluZm8gcmVjb2RlXFxcIikgZm9yIHRoaXMgcHVycG9zZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUbyBjb21waWxlIHRoZSBVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1ZnMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IGhhdmVuJ3QgaGVhcmQgYWJvdXQgYWxsIG9mIHRoaXMgYmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVRlNfRlNfV1JJVEVcXG4gIDMzOlxcdFxcdGJvb2wgXFxcIlVGUyBmaWxlIHN5c3RlbSB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpXFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBVRlNfRlNcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0cnkgd3JpdGluZyB0byBVRlMgcGFydGl0aW9ucy4gVGhpcyBpc1xcbiAgMzc6XFx0XFx0ICBleHBlcmltZW50YWwsIHNvIHlvdSBzaG91bGQgYmFjayB1cCB5b3VyIFVGUyBwYXJ0aXRpb25zIGJlZm9yZWhhbmQuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBVRlNfREVCVUdcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlVGUyBkZWJ1Z2dpbmdcXFwiXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIFVGU19GU1xcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgVUZTIGZpbGVzeXN0ZW0sIHNheVxcbiAgNDQ6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIF9tYW55XyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0byBiZVxcbiAgNDU6XFx0XFx0ICB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzoxNS45NDMxNDM3MzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODgwNjIyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkluaXRpYWwgRGlhZ25vc3RpYzogTWFrZWZpbGUgSW5zcGVjdGlvbioqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIFVGUyBmaWxlIHN5c3RlbSBtb2R1bGVzIHNob3VsZCByZXNpZGUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBsaWtlbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkIHByb2Nlc3Mgb2YgVUZTLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGlzc3VlLCBhbmQgdGhpcyBgTWFrZWZpbGVgIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbnN0YWxsZWQuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGluY2x1ZGUgZGlyZWN0aXZlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpdGhpbiBpdC4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3Igb3IgdmFyaWF0aW9uIGluIHRoZSBidWlsZCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjIyLjgyMzc2Nzk4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IHVmcyBmaWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfVUZTX0ZTKSArPSB1ZnMub1xcbiAgIDc6XFx0XFxuICAgODpcXHR1ZnMtb2JqcyA6PSBiYWxsb2MubyBjeWxpbmRlci5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIFxcXFxcXG4gICA5OlxcdFxcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXFxuICAxMDpcXHRjY2ZsYWdzLSQoQ09ORklHX1VGU19ERUJVRykgICAgKz0gLURERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzoyMi44MjM4MjcyNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5ODYxMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYC4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkIHdpdGhpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY2FsbCBncmFwaC4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwZXIgd2l0aGluIGEgcGFydGljdWxhciBkcml2ZXIgbW9kdWxlPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3RvcmFnZSBhY2Nlc3MgcGF0aC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyB0cmlnZ2VyIHRoZXNlIGNhbGxzIOKAkyBpcyBpdCBkdXJpbmcgaW5vZGUgbG9hZGluZywgZGF0YSBibG9jayByZWFkcywgbWV0YWRhdGEgb3BlcmF0aW9ucywgb3IgcGVyaGFwcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBJJ20gbG9va2luZyBmb3IuIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjI1LjI2MzY5MDYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4NTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfbG9hZF9jeWxpbmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2JhbGxvYy5jPTYyPXZvaWQgdWZzX2ZyZWVfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBmcmFnbWVudCwgdW5zaWduZWQgY291bnQpXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmMtODctXFx0XFx0XFxuZnMvdWZzL2JhbGxvYy5jOjg4OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy04OS1cXHRpZiAoIXVjcGkpIFxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jPTE0NT12b2lkIHVmc19mcmVlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJhZ21lbnQsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jLTE4Mi1cXG5mcy91ZnMvYmFsbG9jLmM6MTgzOlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy0xODQtXFx0aWYgKCF1Y3BpKSBcXG4tLVxcbmZzL3Vmcy9iYWxsb2MuYz00OTc9c3RhdGljIHU2NCB1ZnNfYWRkX2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJhZ21lbnQsXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmMtNTE3LVxcdFxcdHJldHVybiAwO1xcbmZzL3Vmcy9iYWxsb2MuYzo1MTg6XFx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2dubyk7XFxuZnMvdWZzL2JhbGxvYy5jLTUxOS1cXHRpZiAoIXVjcGkpXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmM9NTc2PXN0YXRpYyB1NjQgdWZzX2FsbG9jX2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBjZ25vLFxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jLTYyMy1jZ19mb3VuZDpcXG5mcy91ZnMvYmFsbG9jLmM6NjI0OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy02MjUtXFx0aWYgKCF1Y3BpKVxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmM9MTAwPXZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGJpdG1hcF9ucilcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTE0My0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoxNDQ6c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoXFxuZnMvdWZzL2N5bGluZGVyLmMtMTQ1LVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMTU1LVxcdGlmIChjZ25vIFxcdTAwM2U9IHVzcGktXFx1MDAzZXNfbmNnKSB7XFxuZnMvdWZzL2N5bGluZGVyLmM6MTU2OlxcdFxcdHVmc19wYW5pYyAoc2IsIFxcXCJ1ZnNfbG9hZF9jeWxpbmRlclxcXCIsIFxcXCJpbnRlcm5hbCBlcnJvciwgaGlnaCBudW1iZXIgb2YgY2dcXFwiKTtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzEtXFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vW2Nnbm9dICE9IGNnbm8pIHtcXG5mcy91ZnMvY3lsaW5kZXIuYzoxNzI6XFx0XFx0XFx0XFx0dWZzX3BhbmljIChzYiwgXFxcInVmc19sb2FkX2N5bGluZGVyXFxcIiwgXFxcImludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcXFwiKTtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzMtXFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuLS1cXG5mcy91ZnMvaWFsbG9jLmM9NTc9dm9pZCB1ZnNfZnJlZV9pbm9kZSAoc3RydWN0IGlub2RlICogaW5vZGUpXFxuLS1cXG5mcy91ZnMvaWFsbG9jLmMtODItXFx0Yml0ID0gdWZzX2lub3RvY2dvZmYgKGlubyk7XFxuZnMvdWZzL2lhbGxvYy5jOjgzOlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcXG5mcy91ZnMvaWFsbG9jLmMtODQtXFx0aWYgKCF1Y3BpKSB7XFxuLS1cXG5mcy91ZnMvaWFsbG9jLmM9MTcyPXN0cnVjdCBpbm9kZSAqdWZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvdWZzL2lhbGxvYy5jLTIzOC1jZ19mb3VuZDpcXG5mcy91ZnMvaWFsbG9jLmM6MjM5OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcXG5mcy91ZnMvaWFsbG9jLmMtMjQwLVxcdGlmICghdWNwaSkge1xcbi0tXFxuZnMvdWZzL3Vmcy5oPTg4PXU2NCB1ZnNfbmV3X2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqLCB1NjQgZnJhZ21lbnQsIHU2NCBnb2FsLFxcbi0tXFxuZnMvdWZzL3Vmcy5oLTkxLS8qIGN5bGluZGVyLmMgKi9cXG5mcy91ZnMvdWZzLmg6OTI6ZXh0ZXJuIHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCk7XFxuZnMvdWZzL3Vmcy5oLTkzLWV4dGVybiB2b2lkIHVmc19wdXRfY3lsaW5kZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjI1LjMwOTg4MjUwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDg4MDE2NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFVGUyBDeWxpbmRlciBMb2FkaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IFVGUyBjeWxpbmRlciBkYXRhIGlzIGxvYWRlZC4gSSBzZWUgYHVmc19sb2FkX2N5bGluZGVyYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgZmlsZSB3aXRoaW4gdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSBvdGhlciBwYXJ0cyBvZiB0aGUgVUZTIGNvZGUuIFRoZW4sIGB1ZnNfcmVhZF9jeWxpbmRlcmAgaXMgc3RhdGljIHdpdGhpbiBgZnMvdWZzL2N5bGluZGVyLmNgLCBzbyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgbW9kdWxlIGFyZSBhIGdvb2QgaGludCBhcyB0byBlbmNhcHN1bGF0aW9uIG9mIGZ1bmN0aW9uYWxpdHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB1ZnNfbG9hZF9jeWxpbmRlcmAgZGVmaW5pdGlvbiBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI2LjE5MDA0ODYzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy91ZnMvY3lsaW5kZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0ICogSWYgY3lsaW5kZXIgZ3JvdXAgaXMgbm90IGluIGNhY2hlLCB3ZSB3aWxsIGxvYWQgaXQgZnJvbSBkaXNrLlxcbiAxNDE6XFx0ICpcXG4gMTQyOlxcdCAqIFRoZSBjYWNoZSBpcyBtYW5hZ2VkIGJ5IExSVSBhbGdvcml0aG0uIFxcbiAxNDM6XFx0ICovXFxuIDE0NDpcXHRzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcXG4gMTQ1OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxcbiAxNDY6XFx0e1xcbiAxNDc6XFx0XFx0c3RydWN0IHVmc19zYl9pbmZvICogc2JpID0gVUZTX1NCKHNiKTtcXG4gMTQ4OlxcdFxcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcXG4gMTQ5OlxcdFxcdHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTtcXG4gMTUwOlxcdFxcdHVuc2lnbmVkIGNnLCBpLCBqO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldVxcXFxuXFxcIiwgY2dubyk7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdHVzcGkgPSBzYmktXFx1MDAzZXNfdXNwaTtcXG4gMTU1OlxcdFxcdGlmIChjZ25vIFxcdTAwM2U9IHVzcGktXFx1MDAzZXNfbmNnKSB7XFxuIDE1NjpcXHRcXHRcXHR1ZnNfcGFuaWMgKHNiLCBcXFwidWZzX2xvYWRfY3lsaW5kZXJcXFwiLCBcXFwiaW50ZXJuYWwgZXJyb3IsIGhpZ2ggbnVtYmVyIG9mIGNnXFxcIik7XFxuIDE1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTU4OlxcdFxcdH1cXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBDeWxpbmRlciBncm91cCBudW1iZXIgY2cgaXQgaW4gY2FjaGUgYW5kIGl0IHdhcyBsYXN0IHVzZWRcXG4gMTYxOlxcdFxcdCAqL1xcbiAxNjI6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vWzBdID09IGNnbm8pIHtcXG4gMTYzOlxcdFxcdFxcdFVGU0QoXFxcIkVYSVRcXFxcblxcXCIpO1xcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIHNiaS1cXHUwMDNlc191Y3BpWzBdO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFx0LypcXG4gMTY3OlxcdFxcdCAqIE51bWJlciBvZiBjeWxpbmRlciBncm91cHMgaXMgbm90IGhpZ2hlciB0aGFuIFVGU19NQVhfR1JPVVBfTE9BREVEXFxuIDE2ODpcXHRcXHQgKi9cXG4gMTY5OlxcdFxcdGlmICh1c3BpLVxcdTAwM2VzX25jZyBcXHUwMDNjPSBVRlNfTUFYX0dST1VQX0xPQURFRCkge1xcbiAxNzA6XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vW2Nnbm9dICE9IFVGU19DR05PX0VNUFRZKSB7XFxuIDE3MTpcXHRcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2Nnbm9bY2dub10gIT0gY2dubykge1xcbiAxNzI6XFx0XFx0XFx0XFx0XFx0dWZzX3BhbmljIChzYiwgXFxcInVmc19sb2FkX2N5bGluZGVyXFxcIiwgXFxcImludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcXFwiKTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbiAxNzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NTpcXHRcXHRcXHRcXHR9XFxuIDE3NjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxNzc6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF1ZnNfcmVhZF9jeWxpbmRlciAoc2IsIGNnbm8sIGNnbm8pKSkge1xcbiAxNzg6XFx0XFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTgwOlxcdFxcdFxcdFxcdH1cXG4gMTgxOlxcdFxcdFxcdH1cXG4gMTgyOlxcdFxcdFxcdFVGU0QoXFxcIkVYSVRcXFxcblxcXCIpO1xcbiAxODM6XFx0XFx0XFx0cmV0dXJuIHNiaS1cXHUwMDNlc191Y3BpW2Nnbm9dO1xcbiAxODQ6XFx0XFx0fVxcbiAxODU6XFx0XFx0LypcXG4gMTg2OlxcdFxcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBpbiBjYWNoZSBidXQgaXQgd2FzIG5vdCBsYXN0IHVzZWQsIFxcbiAxODc6XFx0XFx0ICogd2Ugd2lsbCBtb3ZlIHRvIHRoZSBmaXJzdCBwb3NpdGlvblxcbiAxODg6XFx0XFx0ICovXFxuIDE4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2JpLVxcdTAwM2VzX2NnX2xvYWRlZCBcXHUwMDI2XFx1MDAyNiBzYmktXFx1MDAzZXNfY2dub1tpXSAhPSBjZ25vOyBpKyspO1xcbiAxOTA6XFx0XFx0aWYgKGkgXFx1MDAzYyBzYmktXFx1MDAzZXNfY2dfbG9hZGVkIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19jZ25vW2ldID09IGNnbm8pIHtcXG4gMTkxOlxcdFxcdFxcdGNnID0gc2JpLVxcdTAwM2VzX2Nnbm9baV07XFxuIDE5MjpcXHRcXHRcXHR1Y3BpID0gc2JpLVxcdTAwM2VzX3VjcGlbaV07XFxuIDE5MzpcXHRcXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2UgMDsgai0tKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tqXSA9IHNiaS1cXHUwMDNlc19jZ25vW2otMV07XFxuIDE5NTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cXHUwMDNlc191Y3BpW2otMV07XFxuIDE5NjpcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1swXSA9IGNnO1xcbiAxOTg6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xcbiAxOTk6XFx0XFx0LypcXG4gMjAwOlxcdFxcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBub3QgaW4gY2FjaGUsIHdlIHdpbGwgcmVhZCBpdCBmcm9tIGRpc2tcXG4gMjAxOlxcdFxcdCAqIGFuZCBwdXQgaXQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uXFxuIDIwMjpcXHRcXHQgKi9cXG4gMjAzOlxcdFxcdH0gZWxzZSB7XFxuIDIwNDpcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2NnX2xvYWRlZCBcXHUwMDNjIFVGU19NQVhfR1JPVVBfTE9BREVEKVxcbiAyMDU6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2NnX2xvYWRlZCsrO1xcbiAyMDY6XFx0XFx0XFx0ZWxzZVxcbiAyMDc6XFx0XFx0XFx0XFx0dWZzX3B1dF9jeWxpbmRlciAoc2IsIFVGU19NQVhfR1JPVVBfTE9BREVELTEpO1xcbiAyMDg6XFx0XFx0XFx0dWNwaSA9IHNiaS1cXHUwMDNlc191Y3BpW3NiaS1cXHUwMDNlc19jZ19sb2FkZWQgLSAxXTtcXG4gMjA5OlxcdFxcdFxcdGZvciAoaiA9IHNiaS1cXHUwMDNlc19jZ19sb2FkZWQgLSAxOyBqIFxcdTAwM2UgMDsgai0tKSB7XFxuIDIxMDpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tqXSA9IHNiaS1cXHUwMDNlc19jZ25vW2otMV07XFxuIDIxMTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cXHUwMDNlc191Y3BpW2otMV07XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XFxuIDIxNDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgMCkpKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRVRlNEKFxcXCJFWElUIChGQUlMRUQpXFxcXG5cXFwiKTtcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMTc6XFx0XFx0XFx0fVxcbiAyMTg6XFx0XFx0fVxcbiAyMTk6XFx0XFx0VUZTRChcXFwiRVhJVFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI2LjE5MDEyNDAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc5MTMzNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgKipcblxuT2theSwgSSdtIGFscmVhZHkgbG9va2luZyBhdCB0aGUgYGZzL3Vmcy9zdXBlci5jYCBmaWxlLCBhbmQgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AgZnVuY3Rpb24gYmV0dGVyLiBJdCdzIG9idmlvdXNseSBpbnZvbHZlZCBpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgdGhlIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMgYXJlIGxvYWRlZCBmcm9tIGRpc2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGNhbGxzIHRoaXMgdGhpbmcuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHB1dCBpdCBpbiBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSB2YXJpb3VzIHBvaW50cyB0aGF0IGl0J3MgY3J1Y2lhbCB3aXRoaW4gdGhlIHdpZGVyIFVGUyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGVuIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBMZXQncyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbHMgdG8gYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjQ6MjkuMjY5MjYwNDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHRcXG4gNDUxOlxcdC8qXFxuIDQ1MjpcXHQgKiBSZWFkIG9uLWRpc2sgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggY3lsaW5kZXIgZ3JvdXBzXFxuIDQ1MzpcXHQgKi9cXG4gNDU0OlxcdHN0YXRpYyBpbnQgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0c3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0Ioc2IpO1xcbiA0NTc6XFx0XFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKnVzcGkgPSBzYmktXFx1MDAzZXNfdXNwaTtcXG4gNDU4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKiBiYXNlLCAqIHNwYWNlO1xcbiA0NTk6XFx0XFx0dW5zaWduZWQgc2l6ZSwgYmxrcywgaTtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0VUZTRChcXFwiRU5URVJcXFxcblxcXCIpO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHQvKlxcbiA0NjQ6XFx0XFx0ICogUmVhZCBjcyBzdHJ1Y3R1cmVzIGZyb20gKHVzdWFsbHkpIGZpcnN0IGRhdGEgYmxvY2tcXG4gNDY1OlxcdFxcdCAqIG9uIHRoZSBkZXZpY2UuIFxcbiA0NjY6XFx0XFx0ICovXFxuIDQ2NzpcXHRcXHRzaXplID0gdXNwaS1cXHUwMDNlc19jc3NpemU7XFxuIDQ2ODpcXHRcXHRibGtzID0gKHNpemUgKyB1c3BpLVxcdTAwM2VzX2ZzaXplIC0gMSkgXFx1MDAzZVxcdTAwM2UgdXNwaS1cXHUwMDNlc19mc2hpZnQ7XFxuIDQ2OTpcXHRcXHRiYXNlID0gc3BhY2UgPSBrbWFsbG9jKHNpemUsIEdGUF9OT0ZTKTtcXG4gNDcwOlxcdFxcdGlmICghYmFzZSlcXG4gNDcxOlxcdFxcdFxcdGdvdG8gZmFpbGVkOyBcXG4gNDcyOlxcdFxcdHNiaS1cXHUwMDNlc19jc3AgPSAoc3RydWN0IHVmc19jc3VtICopc3BhY2U7XFxuIDQ3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmxrczsgaSsrKSB7XFxuIDQ3NDpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JfYnJlYWQoc2IsIHVzcGktXFx1MDAzZXNfY3NhZGRyICsgaSk7XFxuIDQ3NTpcXHRcXHRcXHRpZiAoIWJoKVxcbiA0NzY6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDQ3NzpcXHRcXHRcXHRtZW1jcHkoc3BhY2UsIGJoLVxcdTAwM2ViX2RhdGEsIHVzcGktXFx1MDAzZXNfZnNpemUpO1xcbiA0Nzg6XFx0XFx0XFx0c3BhY2UgKz0gdXNwaS1cXHUwMDNlc19mc2l6ZTtcXG4gNDc5OlxcdFxcdFxcdGJyZWxzZSAoYmgpO1xcbiA0ODA6XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHQvKlxcbiA0ODM6XFx0XFx0ICogUmVhZCBjeWxpbmRlciBncm91cCAod2UgcmVhZCBvbmx5IGZpcnN0IGZyYWdtZW50IGZyb20gYmxvY2tcXG4gNDg0OlxcdFxcdCAqIGF0IHRoaXMgdGltZSkgYW5kIHByZXBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBjZyBjYWNoaW5nLlxcbiA0ODU6XFx0XFx0ICovXFxuIDQ4NjpcXHRcXHRzYmktXFx1MDAzZXNfdWNnID0ga21hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1c3BpLVxcdTAwM2VzX25jZywgR0ZQX05PRlMpO1xcbiA0ODc6XFx0XFx0aWYgKCFzYmktXFx1MDAzZXNfdWNnKVxcbiA0ODg6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDQ4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdXNwaS1cXHUwMDNlc19uY2c7IGkrKykgXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI5LjI2OTM2NTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjYxMTkwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHVmc19yZWFkX2N5bGluZGVyYCBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVmc19yZWFkX2N5bGluZGVyYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9wcyB1cCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBjeWxpbmRlciBncm91cHMsIHNwZWNpZmljYWxseSBkdXJpbmcgbG9hZGluZy4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gYmxvY2sgYW5kIGZyYWdtZW50IGFsbG9jYXRpb24sIGFuZCBhbHNvIGRlYWxsb2NhdGlvbiBvciBmcmVlIG9wZXJhdGlvbnMuIEl0J3MgYWxzbyB1dGlsaXplZCB3aGVuIHdlJ3JlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YSB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGl0c2VsZi4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHNvdW5kcyByaWdodC4gSnVzdCB0byBtYWtlIHN1cmUsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgYGZzL3Vmcy9zdXBlci5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmc190eXBlYCBkZWZpbml0aW9ucyBhbmQgd2hhdCBtb3VudCBjYWxsYmFja3MgdGhhdCBmaWxlIGltcGxlbWVudHMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjU6MTUuOTMwNTU5MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc19mc190eXBlfHVmc19maWxsX3N1cGVyfHVmc19pbml0X2ZzX2NvbnRleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9zdXBlci5jPTY5OT1zdGF0aWMgdTY0IHVmc19tYXhfYnl0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTcxNS1cXG5mcy91ZnMvc3VwZXIuYzo3MTY6c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdWZzL3N1cGVyLmMtNzE3LXtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0MTk9c3RhdGljIGludCB1ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3Vmcy9zdXBlci5jLTE0MjAte1xcbmZzL3Vmcy9zdXBlci5jOjE0MjE6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIHVmc19maWxsX3N1cGVyKTtcXG5mcy91ZnMvc3VwZXIuYy0xNDIyLX1cXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdWZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTQzNS1cXG5mcy91ZnMvc3VwZXIuYzoxNDM2OnN0YXRpYyBpbnQgdWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdWZzL3N1cGVyLmMtMTQzNy17XFxuLS1cXG5mcy91ZnMvc3VwZXIuYy0xNDYwLVxcbmZzL3Vmcy9zdXBlci5jOjE0NjE6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVmc19mc190eXBlID0ge1xcbmZzL3Vmcy9zdXBlci5jLTE0NjItXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTE0NjQtXFx0LmtpbGxfc2JcXHQ9IGtpbGxfYmxvY2tfc3VwZXIsXFxuZnMvdWZzL3N1cGVyLmM6MTQ2NTpcXHQuaW5pdF9mc19jb250ZXh0ID0gdWZzX2luaXRfZnNfY29udGV4dCxcXG5mcy91ZnMvc3VwZXIuYy0xNDY2LVxcdC5wYXJhbWV0ZXJzXFx0PSB1ZnNfcGFyYW1fc3BlYyxcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0NzE9c3RhdGljIGludCBfX2luaXQgaW5pdF91ZnNfZnModm9pZClcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTE0NzUtXFx0XFx0Z290byBvdXQxO1xcbmZzL3Vmcy9zdXBlci5jOjE0NzY6XFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2dWZzX2ZzX3R5cGUpO1xcbmZzL3Vmcy9zdXBlci5jLTE0NzctXFx0aWYgKGVycilcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0ODY9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfdWZzX2ZzKHZvaWQpXFxuZnMvdWZzL3N1cGVyLmMtMTQ4Ny17XFxuZnMvdWZzL3N1cGVyLmM6MTQ4ODpcXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNnVmc19mc190eXBlKTtcXG5mcy91ZnMvc3VwZXIuYy0xNDg5LVxcdGRlc3Ryb3lfaW5vZGVjYWNoZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNToxNS45NzYyMzIyNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMzMTg1ODY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVUZTIFZ1bG5lcmFiaWxpdHk6IEEgRnV6emluZyBPcHBvcnR1bml0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCwgc3BlY2lmaWNhbGx5IGB1ZnNfcmVhZF9jeWxpbmRlcigpYCwgaXMgdmFsaWRhdGluZyB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSByZWFkIGZyb20gZGlzaywgZm9jdXNpbmcgb24gdGhlIGZyZWUgYml0bWFwJ3MgaW50ZWdyaXR5LiBJdCdzIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGZyZWUgYml0bWFwIGRvbid0IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiBJZiB0aGV5IGRvLCBpdCdzIGEgY3JpdGljYWwgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdoZW4gdGhlIGZyZWUgYml0bWFwIGlzIG1hbmlwdWxhdGVkLiBQcmV0dHkgc3RhbmRhcmQgZmlsZXN5c3RlbSBlcnJvciBoYW5kbGluZywgcmVhbGx5LlxuXG5JcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5ISBGaWxlc3lzdGVtIGZ1enppbmcgaXMgYSBnb2xkIHN0YW5kYXJkIHRhcmdldCBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIgYW5kIHN5ei1jbHVzdGVyLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vdW50aW5nIGNvcnJ1cHRlZCBkaXNrIGltYWdlcyBhbmQgcG9raW5nIGF0IHRoZSBmaWxlc3lzdGVtIGNvcmUg4oCTIGJsb2NrIGFsbG9jYXRpb24sIGZpbGUgY3JlYXRpb24sIGRlbGV0aW9uLCBldGMuIOKAkyB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuIEFuZCB0aGlzIHBhdGNoIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBVRlMgbG9naWMuXG5cbk5vdywgd2hlcmUgY2FuIHdlIGV2ZW4gaGl0IHRoaXMgY29kZT8gVUZTIGlzIGEgY29yZSBmaWxlc3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwgKGBDT05GSUdfVUZTX0ZTYCksIHNvIHRoYXQncyBnb29kLiBJdCBjYW4gYmUgbW91bnRlZCBvbiBsb29wIGRldmljZXMgb3IgcmFtZGlza3Mgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBnaXZlcyB1cyBwbGVudHkgb2YgZmxleGliaWxpdHkuIFdlIG5lZWQgYENPTkZJR19VRlNfRlNgLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGBDT05GSUdfVUZTX0ZTX1dSSVRFYD8gRG9lcyByZWFkLXdyaXRlIGFjY2VzcyBpbnRyb2R1Y2UgbW9yZSBhdHRhY2sgc3VyZmFjZT8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXRoZXIgYHVmc19sb2FkX2N5bGluZGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVhZC1vbmx5ICphbmQqIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY2FsbHMgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNhbGxlcnMsIGluIGBiYWxsb2MuY2AsIGl0J3MgYmVpbmcgdXNlZCBpbiBgdWZzX2ZyZWVfZnJhZ21lbnRzYCwgYHVmc19mcmVlX2Jsb2Nrc2AsIGB1ZnNfYWRkX2ZyYWdtZW50c2AsIGFuZCBgdWZzX2FsbG9jX2ZyYWdtZW50c2AuIFRoZW4gaW4gYGlhbGxvYy5jYCwgYHVmc19mcmVlX2lub2RlYCwgYW5kIGB1ZnNfbmV3X2lub2RlYC4gQW5kIGZpbmFsbHksIGluIGBzdXBlci5jYCwgd2UgaGF2ZSBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AuIEhtbSwgZG9lcyAqdGhhdCogY2FsbCBgdWZzX2xvYWRfY3lsaW5kZXJgPyBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzdXBlci5jYCBwYXRoLiBTbyBtYW55IHRoaW5ncyB0b3VjaGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjY6MTkuMjk0ODI3MzA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzOTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfcmVhZF9jeWxpbmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2N5bGluZGVyLmMtMjgtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuZnMvdWZzL2N5bGluZGVyLmM6OTI6XFx0dWZzX2Vycm9yKHNiLCBcXFwidWZzX3JlYWRfY3lsaW5kZXJcXFwiLCBlcnIsIGNnbm8pO1xcbmZzL3Vmcy9jeWxpbmRlci5jLTkzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jPTE0ND1zdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cXHRcXHR9IGVsc2Uge1xcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XFxuZnMvdWZzL2N5bGluZGVyLmMtMTc4LVxcdFxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMjEzLVxcdFxcdHNiaS1cXHUwMDNlc191Y3BpWzBdID0gdWNwaTtcXG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XFx0XFx0aWYgKHVubGlrZWx5KCF1ZnNfcmVhZF9jeWxpbmRlciAoc2IsIGNnbm8sIDApKSkge1xcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cXHRcXHRcXHRVRlNEKFxcXCJFWElUIChGQUlMRUQpXFxcXG5cXFwiKTtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNDUzLSAqL1xcbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy91ZnMvc3VwZXIuYy00NTUte1xcbi0tXFxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTIxNy1cXHRpZiAoIXNiX3Jkb25seShzYikpXFxuZnMvdWZzL3N1cGVyLmM6MTIxODpcXHRcXHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxcbmZzL3Vmcy9zdXBlci5jLTEyMTktXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyOTMtXFx0XFx0fVxcbmZzL3Vmcy9zdXBlci5jOjEyOTQ6XFx0XFx0aWYgKCF1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzKHNiKSkge1xcbmZzL3Vmcy9zdXBlci5jLTEyOTUtXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNjoxOS4zNDY5NzM3NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4ODMxNDE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFVGUyBXcml0ZSBDYXBhYmlsaXR5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aGUgYENPTkZJR19VRlNfRlNfV1JJVEVgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIHdyaXRlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBVRlMgZmlsZXN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBvYnZpb3VzLCBkb2VzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYWxsb3cgbWUgdG8gd3JpdGUgdG8gVUZTLiBTZWNvbmRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMsIHNvIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZnMvdWZzYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlIGFyZSBjb25kaXRpb25hbGl6ZWQgYmFzZWQgb24gdGhpcyBmbGFnLCB3aGljaCwgb2YgY291cnNlLCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzZXQsIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjY6NTIuMjMwMTIwNzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMTE1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1VGU19GU19XUklURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNzM4LVxcbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy03NDAtXFx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyNzktXFx0ICovXFxuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVxcdFxcdHByX2VycihcXFwidWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4ndCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNjo1Mi4zNDgyMzgwMjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxODYzMjIzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFVGUyBXcml0ZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaWYgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzbid0IGVuYWJsZWQsIFVGUyBpcyBzdHVjayBpbiByZWFkLW9ubHkgbW9kZS4gVGhhdCBtYWtlcyBzZW5zZS4gV2hlbiB3ZSdyZSBtb3VudGluZyByZWFkLXdyaXRlLCBgdWZzX2ZpbGxfc3VwZXJgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBhbmQgY2FsbHMgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgLCBhbmQgdGhpbmdzIGxpa2UgYWxsb2NhdGluZyBvciBmcmVlaW5nIGRhdGEgd2lsbCB0aGVuIHVzZSBgdWZzX2xvYWRfY3lsaW5kZXJgLCB3aGljaCBjYWxscyBgdWZzX3JlYWRfY3lsaW5kZXJgLiBSaWdodCwgc28gYm90aCBgQ09ORklHX1VGU19GU2AgYW5kIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBhcmUga2V5IGZvciB0ZXN0aW5nIFVGUyB3cml0ZSBhbmQgdGhlc2UgY3lsaW5kZXIgb3BlcmF0aW9ucy5cblxuTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIHNldCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgYGZzL3Vmcy9LY29uZmlnYCwgSSBzZWU6XG5cbmBjb25maWcgVUZTX0ZTYCBkZXBlbmRzIG9uIGBCTE9DS2AgYW5kIHNlbGVjdHMgYEJVRkZFUl9IRUFEYC5cbmBjb25maWcgVUZTX0ZTX1dSSVRFYCBkZXBlbmRzIG9uIGBVRlNfRlNgLlxuXG5gQkxPQ0tgIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZywgc28gdGhhdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUuIFNvLCB0aGUga2V5IGNvbmZpZ3MgdG8gZW5hYmxlIGFyZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdvb2QuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIGB1ZnNfbG9hZF9jeWxpbmRlcmAgaXMgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9uIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AgdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBvciByZWxhdGVkIG9uZXMuIExldCdzIHN0YXJ0IGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgYGZzL3Vmcy9jeWxpbmRlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6Mjk6NTQuMjExNDY1MzY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ5MDQ1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzL2N5bGluZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2N5bGluZGVyLmMtMjgtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy05OS0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoxMDA6dm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgYml0bWFwX25yKVxcbmZzL3Vmcy9jeWxpbmRlci5jLTEwMS17XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0xNDMtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6MTQ0OnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxcbmZzL3Vmcy9jeWxpbmRlci5jLTE0NS1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgY2dubylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6Mjk6NTQuNTM2Mzc0MjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTkwNTcyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRlMgQ3lsaW5kZXIgR3JvdXAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcHV0X2N5bGluZGVyYCByZXNpZGUgd2l0aGluIGBjeWxpbmRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwYXRjaCBtb2RpZnlpbmcgdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gYHVmc19yZWFkX2N5bGluZGVyYCwgd2hpY2ggYHVmc19sb2FkX2N5bGluZGVyYCBkaXJlY3RseSBjYWxscywgdGhhdCBkZWZpbml0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgSSdtIGNoZWNraW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5IHRoYXQgZGVhbCB3aXRoIGN5bGluZGVyIGdyb3Vwczogc3BlY2lmaWNhbGx5IGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19hbGxvY19mcmFnbWVudHNgLCBgdWZzX25ld19mcmFnbWVudHNgLCBgdWZzX25ld19pbm9kZWAsIGFuZCBgdWZzX2ZyZWVfaW5vZGVgLiBJIGhhZCB0byBjb25maXJtIHRoYXQgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIGluIGBzdXBlci5jYCBpcyBzdGF0aWMgKGl0IGlzISkgYW5kIHRoZSBzYW1lIGZvciBgdWZzX2ZpbGxfc3VwZXJgLiBTbyB0aGF0IHJ1bGVzIHRob3NlIG91dCBvZiBteSBjb3JlIGludGVyZXN0LlxuXG5UaGVyZWZvcmUsIGB1ZnNfbG9hZF9jeWxpbmRlcmAsIGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19uZXdfaW5vZGVgLCBhbmQgYHVmc19mcmVlX2lub2RlYCBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZGVlcGVyIGFuYWx5c2lzLiBCZWNhdXNlIGB1ZnNfbG9hZF9jeWxpbmRlcmAgKmRpcmVjdGx5KiBjYWxscyB0aGUgbW9kaWZpZWQgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgaXQncyB0aGUgbW9zdCBkaXJlY3Qgbm9uLXN0YXRpYyBzeW1ib2wgb2YgaW50ZXJlc3QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzOiB0aGUgZnV6emluZyBpcyBjb25zaWRlcmVkIHdvcnRod2hpbGUgKGBXb3J0aEZ1enppbmc6IHRydWVgKSBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCAoYFVGU19GU2AsIGBVRlNfRlNfV1JJVEVgKS4gVGhlIGluaXRpYWwgZm9jdXMgc3ltYm9sIGxpc3QgY291bGQgYmUgYWxsIG9mIHRob3NlIG1lbnRpb25lZCwgb3IgSSBjYW4gZm9jdXMgb24gYHVmc19sb2FkX2N5bGluZGVyYCBhbG9uZSB0byBuYXJyb3cgdGhpbmdzLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM5LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzozMDoxNS43MjY5NDk5OTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwODE5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVGU19GU1wiLFxuICAgIFwiVUZTX0ZTX1dSSVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWZzX2xvYWRfY3lsaW5kZXJcIixcbiAgICBcInVmc19uZXdfaW5vZGVcIixcbiAgICBcInVmc19mcmVlX2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9mcmFnbWVudHNcIixcbiAgICBcInVmc19mcmVlX2Jsb2Nrc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVUZTX0ZTXCIsXG4gICAgXCJVRlNfRlNfV1JJVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZnNfbG9hZF9jeWxpbmRlclwiLFxuICAgIFwidWZzX25ld19pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfaW5vZGVcIixcbiAgICBcInVmc19mcmVlX2ZyYWdtZW50c1wiLFxuICAgIFwidWZzX2ZyZWVfYmxvY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MTUuODQ4MDM5NzU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDk4NzAyNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjMwOjE1Ljg0ODUwNDUyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwOTg2NTU2NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2YWM4NGI0MWMzZmJkNzQzNDlkY2UwYjAwOGMzM2YwM2RjZTJlNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL2N5bGluZGVyLmMgYi9mcy91ZnMvY3lsaW5kZXIuY1xuaW5kZXggYTI4MTMyNzBjMzAzZS4uZmVjNmM5ZGZiMDU1ZCAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9jeWxpbmRlci5jXG4rKysgYi9mcy91ZnMvY3lsaW5kZXIuY1xuQEAgLTMzLDYgKzMzLDggQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcbiBcdHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTtcbiBcdHN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgKiB1Y2c7XG4rXHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xuK1x0Y29uc3QgY2hhciAqZXJyO1xuIFx0dW5zaWduZWQgaSwgajtcbiBcbiBcdFVGU0QoXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxuXCIsIGNnbm8sIGJpdG1hcF9ucik7XG5AQCAtNDgsOCArNTAsMTAgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoWzBdID0gc2JpLVx1MDAzZXNfdWNnW2Nnbm9dO1xuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgVUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQ7IGkrKykge1xuIFx0XHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2VmcmFnbWVudCArIGkpO1xuLVx0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKVxuK1x0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKSB7XG4rXHRcdFx0ZXJyID0gXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCI7XG4gXHRcdFx0Z290byBmYWlsZWQ7XG4rXHRcdH1cbiBcdH1cbiBcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87XG4gXHRcdFx0XG5AQCAtNjgsNiArNzIsMTYgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHVjcGktXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xuIFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3Rlcm9mZik7XG4gXHR1Y3BpLVx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XG4rXG4rXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50ICogc2ItXHUwMDNlc19ibG9ja3NpemU7XG4rXHRmcmVlX2JpdG1hcF9ieXRlcyA9IEJJVFNfVE9fQllURVMoKHU2NCl1c3BpLVx1MDAzZXNfZnBnKTtcbitcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuK1x0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxuK1x0ICAgICh1NjQpdWNwaS1cdTAwM2VjX2ZyZWVvZmYgKyBmcmVlX2JpdG1hcF9ieXRlcyBcdTAwM2UgY2dfYnl0ZXMpIHtcbitcdFx0ZXJyID0gXCJjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcFwiO1xuK1x0XHRnb3RvIGZhaWxlZDtcbitcdH1cbitcbiBcdFVGU0QoXCJFWElUXFxuXCIpO1xuIFx0cmV0dXJuIHRydWU7XG4gXHRcbkBAIC03NSw3ICs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRmb3IgKGogPSAxOyBqIFx1MDAzYyBpOyBqKyspXG4gXHRcdGJyZWxzZShVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtqXSk7XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTtcbi1cdHVmc19lcnJvciAoc2IsIFwidWZzX3JlYWRfY3lsaW5kZXJcIiwgXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCIsIGNnbm8pO1xuK1x0dWZzX2Vycm9yKHNiLCBcInVmc19yZWFkX2N5bGluZGVyXCIsIGVyciwgY2dubyk7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MTUuODQ4NTA1NDc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMTgzNjg3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBmb3IgYGZzL3Vmcy9jeWxpbmRlci5jYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGl0IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBjeWxpbmRlciBncm91cHMgYXJlIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIFVGUywgc28gdGhpcyBpcyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5UaGUgZGlmZiBpdHNlbGYgcHJvdmlkZXMgdGhlIGZpcnN0IGNsdWUuIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBkZWFscyB3aXRoIHJlYWRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGRpc2suIFRoZSBhZGRlZCBjb2RlIGludHJvZHVjZXMgdHdvIG5ldyB2YXJpYWJsZXMsIGBjZ19ieXRlc2AgYW5kIGBmcmVlX2JpdG1hcF9ieXRlc2AsIGJvdGggb2Ygd2hpY2ggYXJlIG9mIHR5cGUgYHU2NGAuIEkgc3VzcGVjdCB0aGVzZSB3aWxsIGJlIHVzZWQgZm9yIHNvbWUgY3J1Y2lhbCBzaXplIGNoZWNrcy4gVGhlIHZhcmlhYmxlIGBlcnJgIG9mIHR5cGUgYGNvbnN0IGNoYXIgKmAgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYWRkZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIFRoZSBwYXRjaCBub3cgY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgY3lsaW5kZXIgZ3JvdXAgaW4gYnl0ZXMgKGBjZ19ieXRlc2ApIGFuZCB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZnJlZSBiaXRtYXAgKGBmcmVlX2JpdG1hcF9ieXRlc2ApLiBUaGUgYEJJVFNfVE9fQllURVNgIG1hY3JvIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY2FsY3VsYXRpbmcgdGhlIHNpemUgaW4gYnl0ZXMgZnJvbSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCwgd2hpY2ggaXMgcXVpdGUgY29tbW9uIGZvciB0aGlzIHR5cGUgb2YgYWxsb2NhdGlvbiBkYXRhLlxuXG5UaGUgc3Vic2VxdWVudCBgaWZgIHN0YXRlbWVudCBpcyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBraWNrcyBpbi4gSXQgY2hlY2tzIGlmIHRoZSBgZnJlZV9iaXRtYXBfYnl0ZXNgIGlzIHZhbGlkIGFuZCBpZiB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBmcmVlIGJpdG1hcCBwbHVzIGl0cyBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlci4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgbWFsZm9ybWVkIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMuIFRoZSBgZXJyYCB2YXJpYWJsZSwgd2hpY2ggd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGlmIHN0YXRlbWVudCBpcyB0cnVlLCB3aWxsIGFsc28gYmUgcGFzc2VkIGludG8gdGhlIGB1ZnNfZXJyb3JgIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIHNvbWUgbW9yZSBkZXRhaWxlZCBhbmQgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMgYXMgY29tcGFyZWQgdG8gdGhlIG9uZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW4gdGhlIGNvZGUuXG5cbkdpdmVuIG15IGtub3dsZWRnZSBvZiBVRlMsIEknZCBpbW1lZGlhdGVseSB3YW50IHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCBwb3NzaWJseSBvdGhlciByZWxhdGVkIGZpbGVzLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIGNhbGxlZCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgcmVseSBvbiB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hlY2tzIGJlaW5nIGRvbmUuIEkgc2hvdWxkIGtub3cgd2hhdCBpbXBhY3QgdGhlIGNoYW5nZXMgbWF5IGhhdmUgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzozMDoyNS4xNjY4Nzc5NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9jeWxpbmRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDk1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgbGludXgvZnMvdWZzL2N5bGluZGVyLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDE5OThcXG4gICA2OlxcdCAqIERhbmllbCBQaXJrbCBcXHUwMDNjZGFuaWVsLnBpcmtsQGVtYWlsLmN6XFx1MDAzZVxcbiAgIDc6XFx0ICogQ2hhcmxlcyBVbml2ZXJzaXR5LCBGYWN1bHR5IG9mIE1hdGhlbWF0aWNzIGFuZCBQaHlzaWNzXFxuICAgODpcXHQgKlxcbiAgIDk6XFx0ICogIGV4dDIgLSBpbm9kZSAoYmxvY2spIGJpdG1hcCBjYWNoaW5nIGluc3BpcmVkXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0YXQuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9ieXRlb3JkZXIuaFxcdTAwM2VcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcInVmc19mcy5oXFxcIlxcbiAgMjE6XFx0I2luY2x1ZGUgXFxcInVmcy5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcInN3YWIuaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJ1dGlsLmhcXFwiXFxuICAyNDpcXHRcXG4gIDI1OlxcdC8qXFxuICAyNjpcXHQgKiBSZWFkIGN5bGluZGVyIGdyb3VwIGludG8gY2FjaGUuIFRoZSBtZW1vcnkgc3BhY2UgZm9yIHVmc19jZ19wcml2YXRlX2luZm9cXG4gIDI3OlxcdCAqIHN0cnVjdHVyZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdWZzX3JlYWRfc3VwZXIuXFxuICAyODpcXHQgKi9cXG4gIDI5OlxcdHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuICAzMDpcXHRcXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xcbiAgMzM6XFx0XFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xcbiAgMzQ6XFx0XFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xcbiAgMzU6XFx0XFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcXG4gIDM2OlxcdFxcdHU2NCBjZ19ieXRlcywgZnJlZV9iaXRtYXBfYnl0ZXM7XFxuICAzNzpcXHRcXHRjb25zdCBjaGFyICplcnI7XFxuICAzODpcXHRcXHR1bnNpZ25lZCBpLCBqO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxcXG5cXFwiLCBjZ25vLCBiaXRtYXBfbnIpO1xcbiAgNDE6XFx0XFx0dXNwaSA9IHNiaS1cXHUwMDNlc191c3BpO1xcbiAgNDI6XFx0XFx0dWNwaSA9IHNiaS1cXHUwMDNlc191Y3BpW2JpdG1hcF9ucl07XFxuICA0MzpcXHRcXHR1Y2cgPSAoc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqKXNiaS1cXHUwMDNlc191Y2dbY2dub10tXFx1MDAzZWJfZGF0YTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0VUNQSV9VQkgodWNwaSktXFx1MDAzZWZyYWdtZW50ID0gdWZzX2NnY21pbihjZ25vKTtcXG4gIDQ2OlxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCA9IHVzcGktXFx1MDAzZXNfY2dzaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiAgNDc6XFx0XFx0LypcXG4gIDQ4OlxcdFxcdCAqIFdlIGhhdmUgYWxyZWFkeSB0aGUgZmlyc3QgZnJhZ21lbnQgb2YgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgaW4gYnVmZmVyXFxuICA0OTpcXHRcXHQgKi9cXG4gIDUwOlxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFswXSA9IHNiaS1cXHUwMDNlc191Y2dbY2dub107XFxuICA1MTpcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgVUNQSV9VQkgodWNwaSktXFx1MDAzZWNvdW50OyBpKyspIHtcXG4gIDUyOlxcdFxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlZnJhZ21lbnQgKyBpKTtcXG4gIDUzOlxcdFxcdFxcdGlmICghVUNQSV9VQkgodWNwaSktXFx1MDAzZWJoW2ldKSB7XFxuICA1NDpcXHRcXHRcXHRcXHRlcnIgPSBcXFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVxcXCI7XFxuICA1NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gIDU2OlxcdFxcdFxcdH1cXG4gIDU3OlxcdFxcdH1cXG4gIDU4OlxcdFxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xcbiAgNTk6XFx0XFx0XFx0XFx0XFxuICA2MDpcXHRcXHR1Y3BpLVxcdTAwM2VjX2NneFxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfY2d4KTtcXG4gIDYxOlxcdFxcdHVjcGktXFx1MDAzZWNfbmN5bFxcdD0gZnMxNl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfbmN5bCk7XFxuICA2MjpcXHRcXHR1Y3BpLVxcdTAwM2VjX25pYmxrXFx0PSBmczE2X3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uaWJsayk7XFxuICA2MzpcXHRcXHR1Y3BpLVxcdTAwM2VjX25kYmxrXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uZGJsayk7XFxuICA2NDpcXHRcXHR1Y3BpLVxcdTAwM2VjX3JvdG9yXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19yb3Rvcik7XFxuICA2NTpcXHRcXHR1Y3BpLVxcdTAwM2VjX2Zyb3RvclxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfZnJvdG9yKTtcXG4gIDY2OlxcdFxcdHVjcGktXFx1MDAzZWNfaXJvdG9yXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19pcm90b3IpO1xcbiAgNjc6XFx0XFx0dWNwaS1cXHUwMDNlY19idG90b2ZmXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19idG90b2ZmKTtcXG4gIDY4OlxcdFxcdHVjcGktXFx1MDAzZWNfYm9mZlxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfYm9mZik7XFxuICA2OTpcXHRcXHR1Y3BpLVxcdTAwM2VjX2l1c2Vkb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfaXVzZWRvZmYpO1xcbiAgNzA6XFx0XFx0dWNwaS1cXHUwMDNlY19mcmVlb2ZmXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19mcmVlb2ZmKTtcXG4gIDcxOlxcdFxcdHVjcGktXFx1MDAzZWNfbmV4dGZyZWVvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uZXh0ZnJlZW9mZik7XFxuICA3MjpcXHRcXHR1Y3BpLVxcdTAwM2VjX2NsdXN0ZXJzdW1vZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xcbiAgNzM6XFx0XFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcXG4gIDc0OlxcdFxcdHVjcGktXFx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCAqIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gIDc3OlxcdFxcdGZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktXFx1MDAzZXNfZnBnKTtcXG4gIDc4OlxcdFxcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xcbiAgNzk6XFx0XFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxcbiAgODA6XFx0XFx0ICAgICh1NjQpdWNwaS1cXHUwMDNlY19mcmVlb2ZmICsgZnJlZV9iaXRtYXBfYnl0ZXMgXFx1MDAzZSBjZ19ieXRlcykge1xcbiAgODE6XFx0XFx0XFx0ZXJyID0gXFxcImN5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXFxcIjtcXG4gIDgyOlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAgODM6XFx0XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRVRlNEKFxcXCJFWElUXFxcXG5cXFwiKTtcXG4gIDg2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgODc6XFx0XFx0XFxuICA4ODpcXHRmYWlsZWQ6XFxuICA4OTpcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgaTsgaisrKVxcbiAgOTA6XFx0XFx0XFx0YnJlbHNlKFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtqXSk7XFxuICA5MTpcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuICA5MjpcXHRcXHR1ZnNfZXJyb3Ioc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIGVyciwgY2dubyk7XFxuICA5MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MjUuMTY3MDAxMTk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjY4MDQzNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgVUZTIEN5bGluZGVyIEdyb3VwIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBhIHNhbml0eSBjaGVjayB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgdWZzX3JlYWRfY3lsaW5kZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNo4oCZcyBpbXBhY3QsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgc3BlY2lmaWNhbGx5LCBLTVNBTi4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIG9uIGB1Y3BpLVx1MDAzZWNfZnJlZW9mZmAgYW5kIHRoZSBjYWxjdWxhdGVkIGBmcmVlX2JpdG1hcF9ieXRlc2AgYWdhaW5zdCB0aGUgYnVmZmVyIHNpemUgYGNnX2J5dGVzYC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwiYm91bmRzIGNoZWNrLFwiIHdoaWNoIGlzIGV4Y2VsbGVudC5cblxuSSByYW4gdGhyb3VnaCB0aGUgc2NlbmFyaW9zIGluIG15IGhlYWQuIEZpcnN0LCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgYWx3YXlzIHNldCBiZWZvcmUgYW55IHBvdGVudGlhbCBlcnJvciByZXR1cm4gdmlhIGBnb3RvIGZhaWxlZGAuIFNlY29uZCwgdGhlcmUncyBubyBldmlkZW5jZSBvZiBrZXJuZWwgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIHdpbi4gVGhlIGNvZGUgZG9lc24ndCB0b3VjaCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy4gVGhpcmQsIHRoZSBicmFuY2hpbmcgbG9naWMgZG9lc24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsc28gZ29vZC4gRm91cnRoLCB0aGUgcGF0Y2ggZG9lc24ndCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgc28gd2UgYXJlIHNhZmUgdGhlcmUuXG5cblRoYXQncyB3aGVuIEkgem9vbWVkIGluIG9uIHRoZSBib3VuZHMgY2hlY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGVuc3VyaW5nIHRoYXQgYWNjZXNzaW5nIHRoZSBmcmVlIGJpdG1hcCBkb2Vzbid0IGdvIGJleW9uZCBgY2dfYnl0ZXNgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBzcGF0aWFsIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9uIHRoYXQgS0FTQU4gZXhjZWxzIGF0IGRldGVjdGluZy4gSXQgZGlyZWN0bHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBleGFjdGx5IHRoZSB0eXBlIG9mIGJ1ZyBLQVNBTiBpcyBidWlsdCB0byBmaW5kLlxuXG5JIGRvdWJsZS1jaGVja2VkOiBLQVNBTiBjb3ZlcnMgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MuIFRoaXMgYnVnIGlzIGV4cGxpY2l0bHkgYWJvdXQgYSBib3VuZHMgY2hlY2ssIHdoaWNoIGlzIGEgc3BhdGlhbCBzYWZldHkgaXNzdWUuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uLCByZWFkaW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuVG8gc29saWRpZnkgdGhpcyBjb25jbHVzaW9uLCBJIHByZXBhcmVkIGEgY2xlYXIgcmVhc29uaW5nIHN1bW1hcnkuIFRoaXMgcGF0Y2ggdmFsaWRhdGVzIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXAgYWdhaW5zdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiBJdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgY29ycnVwdGVkIFVGUyBpbWFnZXMuIFRoaXMga2luZCBvZiBhY2Nlc3MgaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgaW50ZW5kZWQgZm9yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDEzLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjMwOjQ2LjgzNTA0NjM5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB2YWxpZGF0aW9uIGluIGB1ZnNfcmVhZF9jeWxpbmRlcigpYCB0byB2ZXJpZnkgdGhhdCB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBibG9jayBiaXRtYXAgKGBjX2ZyZWVvZmZgIHBsdXMgYGZyZWVfYml0bWFwX2J5dGVzYCkgZG9lcyBub3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIgKGBjZ19ieXRlc2ApLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGN5bGluZGVyIGdyb3VwIGRhdGEgZnJvbSBhIGNyYWZ0ZWQvY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2UuXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 07:21:58 +0000 UTC FinishedAt: 2026-09-02 07:30:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "786262be6048deab760f68c8acc2c85607165894", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UFS_FS", "UFS_FS_WRITE" ], "series_id": "a3860947-22ea-48a9-8981-5196af809be2" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ufs_load_cylinder", "ufs_new_inode", "ufs_free_inode", "ufs_free_fragments", "ufs_free_blocks" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VGU19GUyYjMzQ7LAogICAgJiMzNDtVRlNfRlNfV1JJVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZnNfbG9hZF9jeWxpbmRlciYjMzQ7LAogICAgJiMzNDt1ZnNfbmV3X2lub2RlJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2lub2RlJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2ZyYWdtZW50cyYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9ibG9ja3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2YWM4NGI0MWMzZmJkNzQzNDlkY2UwYjAwOGMzM2YwM2RjZTJlNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIzOjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmNcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XG4tLS0gYS9mcy91ZnMvY3lsaW5kZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL2N5bGluZGVyLmNcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuIFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuIFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcbiYjNDM7XHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xuJiM0MztcdGNvbnN0IGNoYXIgKmVycjtcbiBcdHVuc2lnbmVkIGksIGo7XG4gXG4gXHRVRlNEKFwmIzM0O0VOVEVSLCBjZ25vICV1LCBiaXRtYXBfbnIgJXVcXG5cJiMzNDssIGNnbm8sIGJpdG1hcF9ucik7XG5AQCAtNDgsOCAmIzQzOzUwLDEwIEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFswXSA9IHNiaS1cdTAwM2VzX3VjZ1tjZ25vXTtcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuIFx0XHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2VmcmFnbWVudCAmIzQzOyBpKTtcbi1cdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSlcbiYjNDM7XHRcdGlmICghVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbaV0pIHtcbiYjNDM7XHRcdFx0ZXJyID0gXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcJiMzNDs7XG4gXHRcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xuIFx0XHRcdFxuQEAgLTY4LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJzdW1vZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3RlcnN1bW9mZik7XG4gXHR1Y3BpLVx1MDAzZWNfY2x1c3Rlcm9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcbiBcdHVjcGktXHUwMDNlY19uY2x1c3RlcmJsa3MgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfbmNsdXN0ZXJibGtzKTtcbiYjNDM7XG4mIzQzO1x0Y2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2Vjb3VudCAqIHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuJiM0MztcdGZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktXHUwMDNlc19mcGcpO1xuJiM0MztcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuJiM0MztcdGlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHxcbiYjNDM7XHQgICAgKHU2NCl1Y3BpLVx1MDAzZWNfZnJlZW9mZiAmIzQzOyBmcmVlX2JpdG1hcF9ieXRlcyBcdTAwM2UgY2dfYnl0ZXMpIHtcbiYjNDM7XHRcdGVyciA9IFwmIzM0O2N5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXCYjMzQ7O1xuJiM0MztcdFx0Z290byBmYWlsZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gXHRyZXR1cm4gdHJ1ZTtcbiBcdFxuQEAgLTc1LDcgJiM0Mzs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRmb3IgKGogPSAxOyBqIFx1MDAzYyBpOyBqJiM0MzsmIzQzOylcbiBcdFx0YnJlbHNlKFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2pdKTtcbiBcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuLVx0dWZzX2Vycm9yIChzYiwgXCYjMzQ7dWZzX3JlYWRfY3lsaW5kZXJcJiMzNDssIFwmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCYjMzQ7LCBjZ25vKTtcbiYjNDM7XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWZzX2xvYWRfY3lsaW5kZXImIzM0OywKICAgICYjMzQ7dWZzX25ld19pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9mcmFnbWVudHMmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAwNzoyMzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmMKaW5kZXggYTI4MTMyNzBjMzAzZS4uZmVjNmM5ZGZiMDU1ZCAxMDA2NDQKLS0tIGEvZnMvdWZzL2N5bGluZGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdWZzL2N5bGluZGVyLmMKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpOwogCXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTsKIAlzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnOwomIzQzOwl1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzOwomIzQzOwljb25zdCBjaGFyICplcnI7CiAJdW5zaWduZWQgaSwgajsKIAogCVVGU0QoJiMzNDtFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XG4mIzM0OywgY2dubywgYml0bWFwX25yKTsKQEAgLTQ4LDggJiM0Mzs1MCwxMCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCVVDUElfVUJIKHVjcGkpLSZndDtiaFswXSA9IHNiaS0mZ3Q7c191Y2dbY2dub107CiAJZm9yIChpID0gMTsgaSAmbHQ7IFVDUElfVUJIKHVjcGkpLSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKIAkJVUNQSV9VQkgodWNwaSktJmd0O2JoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLSZndDtmcmFnbWVudCAmIzQzOyBpKTsKLQkJaWYgKCFVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbaV0pCiYjNDM7CQlpZiAoIVVDUElfVUJIKHVjcGkpLSZndDtiaFtpXSkgewomIzQzOwkJCWVyciA9ICYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXUmIzM0OzsKIAkJCWdvdG8gZmFpbGVkOwomIzQzOwkJfQogCX0KIAlzYmktJmd0O3NfY2dub1tiaXRtYXBfbnJdID0gY2dubzsKIAkJCQpAQCAtNjgsNiAmIzQzOzcyLDE2IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJdWNwaS0mZ3Q7Y19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTsKIAl1Y3BpLSZndDtjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLSZndDtjZ191LmNnXzQ0LmNnX2NsdXN0ZXJvZmYpOwogCXVjcGktJmd0O2NfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpOwomIzQzOwomIzQzOwljZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLSZndDtjb3VudCAqIHNiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS0mZ3Q7c19mcGcpOwomIzQzOwkvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi8KJiM0MzsJaWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fAomIzQzOwkgICAgKHU2NCl1Y3BpLSZndDtjX2ZyZWVvZmYgJiM0MzsgZnJlZV9iaXRtYXBfYnl0ZXMgJmd0OyBjZ19ieXRlcykgewomIzQzOwkJZXJyID0gJiMzNDtjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcCYjMzQ7OwomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7CX0KJiM0MzsKIAlVRlNEKCYjMzQ7RVhJVFxuJiMzNDspOwogCXJldHVybiB0cnVlOwogCQpAQCAtNzUsNyAmIzQzOzg5LDcgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlmb3IgKGogPSAxOyBqICZsdDsgaTsgaiYjNDM7JiM0MzspCiAJCWJyZWxzZShVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Ymhbal0pOwogCXNiaS0mZ3Q7c19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTsKLQl1ZnNfZXJyb3IgKHNiLCAmIzM0O3Vmc19yZWFkX2N5bGluZGVyJiMzNDssICYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXUmIzM0OywgY2dubyk7CiYjNDM7CXVmc19lcnJvcihzYiwgJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LCBlcnIsIGNnbm8pOwogCXJldHVybiBmYWxzZTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFVGUyBDeWxpbmRlciBSZWFkIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBwaW5wb2ludGVkIHJpZ2h0IHRoZXJlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY2xvc2VseSBleGFtaW5pbmcgYGZzL3Vmcy9jeWxpbmRlci5jYCBhbmQgdGhlbiBicm9hZGVuIG15IHZpZXcgdG8gdGhlIG90aGVyIGZpbGVzIHdpdGhpbiB0aGUgYGZzL3Vmcy9gIGRpcmVjdG9yeS4gSSB3YW50IHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHJlbGV2YW50IENPTkZJRyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMsIGFuZCBhbHNvIHNlZSB3aGF0IGtleSBzeW1ib2xzIGFyZSBhdCBwbGF5LiBCYXNpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGVzdGFibGlzaCB0aGUgcGF0Y2gmIzM5O3MgY29udGV4dCB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLgoKVG8gc3BlZWQgdGhpbmdzIHVwLCBJJiMzOTtsbCBsZXZlcmFnZSB0aGUgdG9vbHMgSSYjMzk7bSB1c2VkIHRvOiBhIGdvb2QgZmlsZSByZWFkZXIgb3IgYGdyZXBgIGlzIGVzc2VudGlhbCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29kZSBzZWN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2Ugc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFyZSByZWxhdGVkLiBNeSBnb2FsIGlzIHRvIHJhcGlkbHkgYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjI5OnN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuZnMvdWZzL2N5bGluZGVyLmM6OTI6XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuZnMvdWZzL2N5bGluZGVyLmMtOTMtXHRyZXR1cm4gZmFsc2U7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cdFx0fSBlbHNlIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTIxMy1cdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTQ1My0gKi9cbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XG4tLVxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyMTctXHRpZiAoIXNiX3Jkb25seShzYikpXG5mcy91ZnMvc3VwZXIuYzoxMjE4Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cdFx0XHRnb3RvIGZhaWxlZDtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMjkzLVx0XHR9XG5mcy91ZnMvc3VwZXIuYzoxMjk0Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XG5mcy91ZnMvc3VwZXIuYy0xMjk1LVx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBwcm9jZXNzIGZvciB0aGUgVUZTIGZpbGVzeXN0ZW0uIE15IGZpcnN0IG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZpbGVzOiBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmcy91ZnMvS2NvbmZpZ2AgdG8gbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBVRlMuIFRoaXMgd2lsbCBzaG93IG1lIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgdG8gdGhlIHVzZXIuIEFmdGVyIHRoYXQsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFVGUyBtb2R1bGUgZ2V0cyBidWlsdCwgc28gdGhlIGBmcy91ZnMvTWFrZWZpbGVgIGlzIHRoZSBuZXh0IHRhcmdldC4gVGhhdCBmaWxlIHdpbGwgcmV2ZWFsIHRoZSBidWlsZCBydWxlcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBjb21waWxpbmcgdGhlIFVGUyBjb2RlIGludG8gdGhlIGtlcm5lbC4gVGhlc2UgdHdvIGZpbGVzIHRvZ2V0aGVyIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgVUZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCAocmVhZCBvbmx5KVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIEJTRCBhbmQgZGVyaXZhdGUgdmVyc2lvbnMgb2YgVW5peCAoc3VjaCBhcyBTdW5PUywgRnJlZUJTRCwgTmV0QlNELFxuICAgODpcdFx0ICBPcGVuQlNEIGFuZCBOZVhUc3RlcCkgdXNlIGEgZmlsZSBzeXN0ZW0gY2FsbGVkIFVGUy4gU29tZSBTeXN0ZW0gVlxuICAgOTpcdFx0ICBVbml4ZXMgY2FuIGNyZWF0ZSBhbmQgbW91bnQgaGFyZCBkaXNrIHBhcnRpdGlvbnMgYW5kIGRpc2tldHRlcyB1c2luZ1xuICAxMDpcdFx0ICB0aGlzIGZpbGUgc3lzdGVtIGFzIHdlbGwuIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gcmVhZCBmcm9tXG4gIDExOlx0XHQgIHRoZXNlIHBhcnRpdGlvbnM7IGlmIHlvdSBhbHNvIHdhbnQgdG8gd3JpdGUgdG8gdGhlbSwgc2F5IFkgdG8gdGhlXG4gIDEyOlx0XHQgIGV4cGVyaW1lbnRhbCBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydFwmIzM0OywgYmVsb3cuIFBsZWFzZSByZWFkIHRoZVxuICAxMzpcdFx0ICBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS91ZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdCAgICAgICAgICBUaGUgcmVjZW50bHkgcmVsZWFzZWQgVUZTMiB2YXJpYW50ICh1c2VkIGluIEZyZWVCU0QgNS54KSBpc1xuICAxNjpcdCAgICAgICAgICBSRUFELU9OTFkgc3VwcG9ydGVkLlxuICAxNzpcdFxuICAxODpcdFx0ICBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgZ2VuZXJhbGx5IG5vdCBuZWVkZWQgZm9yIGZsb3BwaWVzLCBzaW5jZSBhXG4gIDE5Olx0XHQgIGdvb2QgcG9ydGFibGUgd2F5IHRvIHRyYW5zcG9ydCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYmV0d2VlbiB1bml4ZXNcbiAgMjA6XHRcdCAgKGFuZCBldmVuIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKSBpcyBnaXZlbiBieSB0aGUgdGFyIHByb2dyYW0gKFwmIzM0O21hblxuICAyMTpcdFx0ICB0YXJcJiMzNDsgb3IgcHJlZmVyYWJseSBcJiMzNDtpbmZvIHRhclwmIzM0OykuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIFdoZW4gYWNjZXNzaW5nIE5lWFRzdGVwIGZpbGVzLCB5b3UgbWF5IG5lZWQgdG8gY29udmVydCB0aGVtIGZyb20gdGhlXG4gIDI0Olx0XHQgIE5lWFQgY2hhcmFjdGVyIHNldCB0byB0aGUgTGF0aW4xIGNoYXJhY3RlciBzZXQ7IHVzZSB0aGUgcHJvZ3JhbVxuICAyNTpcdFx0ICByZWNvZGUgKFwmIzM0O2luZm8gcmVjb2RlXCYjMzQ7KSBmb3IgdGhpcyBwdXJwb3NlLlxuICAyNjpcdFxuICAyNzpcdFx0ICBUbyBjb21waWxlIHRoZSBVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1ZnMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBhbGwgb2YgdGhpcyBiZWZvcmUsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IE4uXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFVGU19GU19XUklURVxuICAzMzpcdFx0Ym9vbCBcJiMzNDtVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydCAoREFOR0VST1VTKVwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBVRlNfRlNcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0cnkgd3JpdGluZyB0byBVRlMgcGFydGl0aW9ucy4gVGhpcyBpc1xuICAzNzpcdFx0ICBleHBlcmltZW50YWwsIHNvIHlvdSBzaG91bGQgYmFjayB1cCB5b3VyIFVGUyBwYXJ0aXRpb25zIGJlZm9yZWhhbmQuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFVGU19ERUJVR1xuICA0MDpcdFx0Ym9vbCBcJiMzNDtVRlMgZGVidWdnaW5nXCYjMzQ7XG4gIDQxOlx0XHRkZXBlbmRzIG9uIFVGU19GU1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgVUZTIGZpbGVzeXN0ZW0sIHNheVxuICA0NDpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIF9tYW55XyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0byBiZVxuICA0NTpcdFx0ICB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIERpYWdub3N0aWM6IE1ha2VmaWxlIEluc3BlY3Rpb24qKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBVRlMgZmlsZSBzeXN0ZW0gbW9kdWxlcyBzaG91bGQgcmVzaWRlLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIHRoaXMgaXMgbGlrZWx5IHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBidWlsZCBwcm9jZXNzIG9mIFVGUy4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21lIGlzc3VlLCBhbmQgdGhpcyBgTWFrZWZpbGVgIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbnN0YWxsZWQuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGluY2x1ZGUgZGlyZWN0aXZlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpdGhpbiBpdC4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3Igb3IgdmFyaWF0aW9uIGluIHRoZSBidWlsZCBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Vmcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggdWZzIGZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19VRlNfRlMpICYjNDM7PSB1ZnMub1xuICAgNzpcdFxuICAgODpcdHVmcy1vYmpzIDo9IGJhbGxvYy5vIGN5bGluZGVyLm8gZGlyLm8gZmlsZS5vIGlhbGxvYy5vIGlub2RlLm8gXFxcbiAgIDk6XHRcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXG4gIDEwOlx0Y2NmbGFncy0kKENPTkZJR19VRlNfREVCVUcpICAgICYjNDM7PSAtRERFQlVHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA2MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdWZzX2xvYWRfY3lsaW5kZXJgIGFuZCBgdWZzX3JlYWRfY3lsaW5kZXJgIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIE15IGdvYWwgaXMgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCB3aXRoaW4gdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGNhbGwgZ3JhcGguIEFyZSB0aGV5IGJlaW5nIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBmaWxlc3lzdGVtIGxheWVyLCBvciBhcmUgdGhleSBidXJpZWQgZGVlcGVyIHdpdGhpbiBhIHBhcnRpY3VsYXIgZHJpdmVyIG1vZHVsZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIHN0b3JhZ2UgYWNjZXNzIHBhdGguIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBvcGVyYXRpb25zIHRyaWdnZXIgdGhlc2UgY2FsbHMg4oCTIGlzIGl0IGR1cmluZyBpbm9kZSBsb2FkaW5nLCBkYXRhIGJsb2NrIHJlYWRzLCBtZXRhZGF0YSBvcGVyYXRpb25zLCBvciBwZXJoYXBzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSBvZiB0aG9zZSBmdW5jdGlvbiBuYW1lcyBzaG91bGQgZ2l2ZSBtZSB0aGUgZW50cnkgcG9pbnRzIEkmIzM5O20gbG9va2luZyBmb3IuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfbG9hZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvYmFsbG9jLmM9NjI9dm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyYWdtZW50LCB1bnNpZ25lZCBjb3VudClcbi0tXG5mcy91ZnMvYmFsbG9jLmMtODctXHRcdFxuZnMvdWZzL2JhbGxvYy5jOjg4Olx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2dubyk7XG5mcy91ZnMvYmFsbG9jLmMtODktXHRpZiAoIXVjcGkpIFxuLS1cbmZzL3Vmcy9iYWxsb2MuYz0xNDU9dm9pZCB1ZnNfZnJlZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGZyYWdtZW50LCB1bnNpZ25lZCBjb3VudClcbi0tXG5mcy91ZnMvYmFsbG9jLmMtMTgyLVxuZnMvdWZzL2JhbGxvYy5jOjE4MzpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xuZnMvdWZzL2JhbGxvYy5jLTE4NC1cdGlmICghdWNwaSkgXG4tLVxuZnMvdWZzL2JhbGxvYy5jPTQ5Nz1zdGF0aWMgdTY0IHVmc19hZGRfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBmcmFnbWVudCxcbi0tXG5mcy91ZnMvYmFsbG9jLmMtNTE3LVx0XHRyZXR1cm4gMDtcbmZzL3Vmcy9iYWxsb2MuYzo1MTg6XHR1Y3BpID0gdWZzX2xvYWRfY3lsaW5kZXIgKHNiLCBjZ25vKTtcbmZzL3Vmcy9iYWxsb2MuYy01MTktXHRpZiAoIXVjcGkpXG4tLVxuZnMvdWZzL2JhbGxvYy5jPTU3Nj1zdGF0aWMgdTY0IHVmc19hbGxvY19mcmFnbWVudHMoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgY2dubyxcbi0tXG5mcy91ZnMvYmFsbG9jLmMtNjIzLWNnX2ZvdW5kOlxuZnMvdWZzL2JhbGxvYy5jOjYyNDpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xuZnMvdWZzL2JhbGxvYy5jLTYyNS1cdGlmICghdWNwaSlcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYz0xMDA9dm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgYml0bWFwX25yKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE0My0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjE0NDpzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcbmZzL3Vmcy9jeWxpbmRlci5jLTE0NS1cdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE1NS1cdGlmIChjZ25vIFx1MDAzZT0gdXNwaS1cdTAwM2VzX25jZykge1xuZnMvdWZzL2N5bGluZGVyLmM6MTU2Olx0XHR1ZnNfcGFuaWMgKHNiLCBcJiMzNDt1ZnNfbG9hZF9jeWxpbmRlclwmIzM0OywgXCYjMzQ7aW50ZXJuYWwgZXJyb3IsIGhpZ2ggbnVtYmVyIG9mIGNnXCYjMzQ7KTtcbmZzL3Vmcy9jeWxpbmRlci5jLTE1Ny1cdFx0cmV0dXJuIE5VTEw7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmMtMTcxLVx0XHRcdGlmIChzYmktXHUwMDNlc19jZ25vW2Nnbm9dICE9IGNnbm8pIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3MjpcdFx0XHRcdHVmc19wYW5pYyAoc2IsIFwmIzM0O3Vmc19sb2FkX2N5bGluZGVyXCYjMzQ7LCBcJiMzNDtpbnRlcm5hbCBlcnJvciwgd3JvbmcgbnVtYmVyIG9mIGNnIGluIGNhY2hlXCYjMzQ7KTtcbmZzL3Vmcy9jeWxpbmRlci5jLTE3My1cdFx0XHRcdFVGU0QoXCYjMzQ7RVhJVCAoRkFJTEVEKVxcblwmIzM0Oyk7XG4tLVxuZnMvdWZzL2lhbGxvYy5jPTU3PXZvaWQgdWZzX2ZyZWVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL3Vmcy9pYWxsb2MuYy04Mi1cdGJpdCA9IHVmc19pbm90b2Nnb2ZmIChpbm8pO1xuZnMvdWZzL2lhbGxvYy5jOjgzOlx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2cpO1xuZnMvdWZzL2lhbGxvYy5jLTg0LVx0aWYgKCF1Y3BpKSB7XG4tLVxuZnMvdWZzL2lhbGxvYy5jPTE3Mj1zdHJ1Y3QgaW5vZGUgKnVmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy91ZnMvaWFsbG9jLmMtMjM4LWNnX2ZvdW5kOlxuZnMvdWZzL2lhbGxvYy5jOjIzOTpcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcbmZzL3Vmcy9pYWxsb2MuYy0yNDAtXHRpZiAoIXVjcGkpIHtcbi0tXG5mcy91ZnMvdWZzLmg9ODg9dTY0IHVmc19uZXdfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqLCB2b2lkICosIHU2NCBmcmFnbWVudCwgdTY0IGdvYWwsXG4tLVxuZnMvdWZzL3Vmcy5oLTkxLS8qIGN5bGluZGVyLmMgKi9cbmZzL3Vmcy91ZnMuaDo5MjpleHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTtcbmZzL3Vmcy91ZnMuaC05My1leHRlcm4gdm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFVGUyBDeWxpbmRlciBMb2FkaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFVGUyBjeWxpbmRlciBkYXRhIGlzIGxvYWRlZC4gSSBzZWUgYHVmc19sb2FkX2N5bGluZGVyYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIGZpbGUgd2l0aGluIHRoZSBVRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSB1c2VkIGludGVybmFsbHkgYnkgb3RoZXIgcGFydHMgb2YgdGhlIFVGUyBjb2RlLiBUaGVuLCBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIHN0YXRpYyB3aXRoaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBtb2R1bGUgYXJlIGEgZ29vZCBoaW50IGFzIHRvIGVuY2Fwc3VsYXRpb24gb2YgZnVuY3Rpb25hbGl0eS4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB1ZnNfbG9hZF9jeWxpbmRlcmAgZGVmaW5pdGlvbiBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0ICogSWYgY3lsaW5kZXIgZ3JvdXAgaXMgbm90IGluIGNhY2hlLCB3ZSB3aWxsIGxvYWQgaXQgZnJvbSBkaXNrLlxuIDE0MTpcdCAqXG4gMTQyOlx0ICogVGhlIGNhY2hlIGlzIG1hbmFnZWQgYnkgTFJVIGFsZ29yaXRobS4gXG4gMTQzOlx0ICovXG4gMTQ0Olx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoXG4gMTQ1Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgY2dubylcbiAxNDY6XHR7XG4gMTQ3Olx0XHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xuIDE0ODpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuIDE0OTpcdFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuIDE1MDpcdFx0dW5zaWduZWQgY2csIGksIGo7XG4gMTUxOlx0XG4gMTUyOlx0XHRVRlNEKFwmIzM0O0VOVEVSLCBjZ25vICV1XFxuXCYjMzQ7LCBjZ25vKTtcbiAxNTM6XHRcbiAxNTQ6XHRcdHVzcGkgPSBzYmktXHUwMDNlc191c3BpO1xuIDE1NTpcdFx0aWYgKGNnbm8gXHUwMDNlPSB1c3BpLVx1MDAzZXNfbmNnKSB7XG4gMTU2Olx0XHRcdHVmc19wYW5pYyAoc2IsIFwmIzM0O3Vmc19sb2FkX2N5bGluZGVyXCYjMzQ7LCBcJiMzNDtpbnRlcm5hbCBlcnJvciwgaGlnaCBudW1iZXIgb2YgY2dcJiMzNDspO1xuIDE1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxNTg6XHRcdH1cbiAxNTk6XHRcdC8qXG4gMTYwOlx0XHQgKiBDeWxpbmRlciBncm91cCBudW1iZXIgY2cgaXQgaW4gY2FjaGUgYW5kIGl0IHdhcyBsYXN0IHVzZWRcbiAxNjE6XHRcdCAqL1xuIDE2MjpcdFx0aWYgKHNiaS1cdTAwM2VzX2Nnbm9bMF0gPT0gY2dubykge1xuIDE2MzpcdFx0XHRVRlNEKFwmIzM0O0VYSVRcXG5cJiMzNDspO1xuIDE2NDpcdFx0XHRyZXR1cm4gc2JpLVx1MDAzZXNfdWNwaVswXTtcbiAxNjU6XHRcdH1cbiAxNjY6XHRcdC8qXG4gMTY3Olx0XHQgKiBOdW1iZXIgb2YgY3lsaW5kZXIgZ3JvdXBzIGlzIG5vdCBoaWdoZXIgdGhhbiBVRlNfTUFYX0dST1VQX0xPQURFRFxuIDE2ODpcdFx0ICovXG4gMTY5Olx0XHRpZiAodXNwaS1cdTAwM2VzX25jZyBcdTAwM2M9IFVGU19NQVhfR1JPVVBfTE9BREVEKSB7XG4gMTcwOlx0XHRcdGlmIChzYmktXHUwMDNlc19jZ25vW2Nnbm9dICE9IFVGU19DR05PX0VNUFRZKSB7XG4gMTcxOlx0XHRcdFx0aWYgKHNiaS1cdTAwM2VzX2Nnbm9bY2dub10gIT0gY2dubykge1xuIDE3MjpcdFx0XHRcdFx0dWZzX3BhbmljIChzYiwgXCYjMzQ7dWZzX2xvYWRfY3lsaW5kZXJcJiMzNDssIFwmIzM0O2ludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcJiMzNDspO1xuIDE3MzpcdFx0XHRcdFx0VUZTRChcJiMzNDtFWElUIChGQUlMRUQpXFxuXCYjMzQ7KTtcbiAxNzQ6XHRcdFx0XHRcdHJldHVybiBOVUxMO1xuIDE3NTpcdFx0XHRcdH1cbiAxNzY6XHRcdFx0fSBlbHNlIHtcbiAxNzc6XHRcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG4gMTc4Olx0XHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuIDE3OTpcdFx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTgwOlx0XHRcdFx0fVxuIDE4MTpcdFx0XHR9XG4gMTgyOlx0XHRcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gMTgzOlx0XHRcdHJldHVybiBzYmktXHUwMDNlc191Y3BpW2Nnbm9dO1xuIDE4NDpcdFx0fVxuIDE4NTpcdFx0LypcbiAxODY6XHRcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBpbiBjYWNoZSBidXQgaXQgd2FzIG5vdCBsYXN0IHVzZWQsIFxuIDE4NzpcdFx0ICogd2Ugd2lsbCBtb3ZlIHRvIHRoZSBmaXJzdCBwb3NpdGlvblxuIDE4ODpcdFx0ICovXG4gMTg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzYmktXHUwMDNlc19jZ19sb2FkZWQgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VzX2Nnbm9baV0gIT0gY2dubzsgaSYjNDM7JiM0MzspO1xuIDE5MDpcdFx0aWYgKGkgXHUwMDNjIHNiaS1cdTAwM2VzX2NnX2xvYWRlZCBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZXNfY2dub1tpXSA9PSBjZ25vKSB7XG4gMTkxOlx0XHRcdGNnID0gc2JpLVx1MDAzZXNfY2dub1tpXTtcbiAxOTI6XHRcdFx0dWNwaSA9IHNiaS1cdTAwM2VzX3VjcGlbaV07XG4gMTkzOlx0XHRcdGZvciAoaiA9IGk7IGogXHUwMDNlIDA7IGotLSkge1xuIDE5NDpcdFx0XHRcdHNiaS1cdTAwM2VzX2Nnbm9bal0gPSBzYmktXHUwMDNlc19jZ25vW2otMV07XG4gMTk1Olx0XHRcdFx0c2JpLVx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cdTAwM2VzX3VjcGlbai0xXTtcbiAxOTY6XHRcdFx0fVxuIDE5NzpcdFx0XHRzYmktXHUwMDNlc19jZ25vWzBdID0gY2c7XG4gMTk4Olx0XHRcdHNiaS1cdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xuIDE5OTpcdFx0LypcbiAyMDA6XHRcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBub3QgaW4gY2FjaGUsIHdlIHdpbGwgcmVhZCBpdCBmcm9tIGRpc2tcbiAyMDE6XHRcdCAqIGFuZCBwdXQgaXQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uXG4gMjAyOlx0XHQgKi9cbiAyMDM6XHRcdH0gZWxzZSB7XG4gMjA0Olx0XHRcdGlmIChzYmktXHUwMDNlc19jZ19sb2FkZWQgXHUwMDNjIFVGU19NQVhfR1JPVVBfTE9BREVEKVxuIDIwNTpcdFx0XHRcdHNiaS1cdTAwM2VzX2NnX2xvYWRlZCYjNDM7JiM0Mzs7XG4gMjA2Olx0XHRcdGVsc2VcbiAyMDc6XHRcdFx0XHR1ZnNfcHV0X2N5bGluZGVyIChzYiwgVUZTX01BWF9HUk9VUF9MT0FERUQtMSk7XG4gMjA4Olx0XHRcdHVjcGkgPSBzYmktXHUwMDNlc191Y3BpW3NiaS1cdTAwM2VzX2NnX2xvYWRlZCAtIDFdO1xuIDIwOTpcdFx0XHRmb3IgKGogPSBzYmktXHUwMDNlc19jZ19sb2FkZWQgLSAxOyBqIFx1MDAzZSAwOyBqLS0pIHtcbiAyMTA6XHRcdFx0XHRzYmktXHUwMDNlc19jZ25vW2pdID0gc2JpLVx1MDAzZXNfY2dub1tqLTFdO1xuIDIxMTpcdFx0XHRcdHNiaS1cdTAwM2VzX3VjcGlbal0gPSBzYmktXHUwMDNlc191Y3BpW2otMV07XG4gMjEyOlx0XHRcdH1cbiAyMTM6XHRcdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG4gMjE0Olx0XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbiAyMTU6XHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuIDIxNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDIxNzpcdFx0XHR9XG4gMjE4Olx0XHR9XG4gMjE5Olx0XHRVRlNEKFwmIzM0O0VYSVRcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AqKgoKT2theSwgSSYjMzk7bSBhbHJlYWR5IGxvb2tpbmcgYXQgdGhlIGBmcy91ZnMvc3VwZXIuY2AgZmlsZSwgYW5kIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdXBlcmJsb2NrIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzYCBmdW5jdGlvbiBiZXR0ZXIuIEl0JiMzOTtzIG9idmlvdXNseSBpbnZvbHZlZCBpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgdGhlIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMgYXJlIGxvYWRlZCBmcm9tIGRpc2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGNhbGxzIHRoaXMgdGhpbmcuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHB1dCBpdCBpbiBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSB2YXJpb3VzIHBvaW50cyB0aGF0IGl0JiMzOTtzIGNydWNpYWwgd2l0aGluIHRoZSB3aWRlciBVRlMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFNvLCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hlbiBhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGZpbmRpbmcgYWxsIHRoZSBjYWxscyB0byBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2Agd2l0aGluIHRoZSBwcm9qZWN0LiBUaGF0JiMzOTtzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDUwOlx0XG4gNDUxOlx0LypcbiA0NTI6XHQgKiBSZWFkIG9uLWRpc2sgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggY3lsaW5kZXIgZ3JvdXBzXG4gNDUzOlx0ICovXG4gNDU0Olx0c3RhdGljIGludCB1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gNDU1Olx0e1xuIDQ1NjpcdFx0c3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0Ioc2IpO1xuIDQ1NzpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKnVzcGkgPSBzYmktXHUwMDNlc191c3BpO1xuIDQ1ODpcdFx0dW5zaWduZWQgY2hhciAqIGJhc2UsICogc3BhY2U7XG4gNDU5Olx0XHR1bnNpZ25lZCBzaXplLCBibGtzLCBpO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0VUZTRChcJiMzNDtFTlRFUlxcblwmIzM0Oyk7XG4gNDYyOlx0XG4gNDYzOlx0XHQvKlxuIDQ2NDpcdFx0ICogUmVhZCBjcyBzdHJ1Y3R1cmVzIGZyb20gKHVzdWFsbHkpIGZpcnN0IGRhdGEgYmxvY2tcbiA0NjU6XHRcdCAqIG9uIHRoZSBkZXZpY2UuIFxuIDQ2NjpcdFx0ICovXG4gNDY3Olx0XHRzaXplID0gdXNwaS1cdTAwM2VzX2Nzc2l6ZTtcbiA0Njg6XHRcdGJsa3MgPSAoc2l6ZSAmIzQzOyB1c3BpLVx1MDAzZXNfZnNpemUgLSAxKSBcdTAwM2VcdTAwM2UgdXNwaS1cdTAwM2VzX2ZzaGlmdDtcbiA0Njk6XHRcdGJhc2UgPSBzcGFjZSA9IGttYWxsb2Moc2l6ZSwgR0ZQX05PRlMpO1xuIDQ3MDpcdFx0aWYgKCFiYXNlKVxuIDQ3MTpcdFx0XHRnb3RvIGZhaWxlZDsgXG4gNDcyOlx0XHRzYmktXHUwMDNlc19jc3AgPSAoc3RydWN0IHVmc19jc3VtICopc3BhY2U7XG4gNDczOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBibGtzOyBpJiM0MzsmIzQzOykge1xuIDQ3NDpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JfYnJlYWQoc2IsIHVzcGktXHUwMDNlc19jc2FkZHIgJiM0MzsgaSk7XG4gNDc1Olx0XHRcdGlmICghYmgpXG4gNDc2Olx0XHRcdFx0Z290byBmYWlsZWQ7XG4gNDc3Olx0XHRcdG1lbWNweShzcGFjZSwgYmgtXHUwMDNlYl9kYXRhLCB1c3BpLVx1MDAzZXNfZnNpemUpO1xuIDQ3ODpcdFx0XHRzcGFjZSAmIzQzOz0gdXNwaS1cdTAwM2VzX2ZzaXplO1xuIDQ3OTpcdFx0XHRicmVsc2UgKGJoKTtcbiA0ODA6XHRcdH1cbiA0ODE6XHRcbiA0ODI6XHRcdC8qXG4gNDgzOlx0XHQgKiBSZWFkIGN5bGluZGVyIGdyb3VwICh3ZSByZWFkIG9ubHkgZmlyc3QgZnJhZ21lbnQgZnJvbSBibG9ja1xuIDQ4NDpcdFx0ICogYXQgdGhpcyB0aW1lKSBhbmQgcHJlcGFyZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgZm9yIGNnIGNhY2hpbmcuXG4gNDg1Olx0XHQgKi9cbiA0ODY6XHRcdHNiaS1cdTAwM2VzX3VjZyA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdXNwaS1cdTAwM2VzX25jZywgR0ZQX05PRlMpO1xuIDQ4NzpcdFx0aWYgKCFzYmktXHUwMDNlc191Y2cpXG4gNDg4Olx0XHRcdGdvdG8gZmFpbGVkO1xuIDQ4OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdXNwaS1cdTAwM2VzX25jZzsgaSYjNDM7JiM0MzspIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB1ZnNfcmVhZF9jeWxpbmRlcmAgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHVmc19yZWFkX2N5bGluZGVyYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9wcyB1cCB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY3lsaW5kZXIgZ3JvdXBzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGxvYWRpbmcuIEkga25vdyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBibG9jayBhbmQgZnJhZ21lbnQgYWxsb2NhdGlvbiwgYW5kIGFsc28gZGVhbGxvY2F0aW9uIG9yIGZyZWUgb3BlcmF0aW9ucy4gSXQmIzM5O3MgYWxzbyB1dGlsaXplZCB3aGVuIHdlJiMzOTtyZSByZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbSBpdHNlbGYuIEhtbSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBzb3VuZHMgcmlnaHQuIEp1c3QgdG8gbWFrZSBzdXJlLCBJIHdhbnQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgdGhlIGBmcy91ZnMvc3VwZXIuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYGZzX3R5cGVgIGRlZmluaXRpb25zIGFuZCB3aGF0IG1vdW50IGNhbGxiYWNrcyB0aGF0IGZpbGUgaW1wbGVtZW50cy4gSXQmIzM5O3MgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWZzX2ZzX3R5cGV8dWZzX2ZpbGxfc3VwZXJ8dWZzX2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvc3VwZXIuYz02OTk9c3RhdGljIHU2NCB1ZnNfbWF4X2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvdWZzL3N1cGVyLmMtNzE1LVxuZnMvdWZzL3N1cGVyLmM6NzE2OnN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdWZzL3N1cGVyLmMtNzE3LXtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDE5PXN0YXRpYyBpbnQgdWZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL3Vmcy9zdXBlci5jLTE0MjAte1xuZnMvdWZzL3N1cGVyLmM6MTQyMTpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCB1ZnNfZmlsbF9zdXBlcik7XG5mcy91ZnMvc3VwZXIuYy0xNDIyLX1cbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIHVmc19jb250ZXh0X29wcyA9IHtcbi0tXG5mcy91ZnMvc3VwZXIuYy0xNDM1LVxuZnMvdWZzL3N1cGVyLmM6MTQzNjpzdGF0aWMgaW50IHVmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvdWZzL3N1cGVyLmMtMTQzNy17XG4tLVxuZnMvdWZzL3N1cGVyLmMtMTQ2MC1cbmZzL3Vmcy9zdXBlci5jOjE0NjE6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVmc19mc190eXBlID0ge1xuZnMvdWZzL3N1cGVyLmMtMTQ2Mi1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmZzL3Vmcy9zdXBlci5jLTE0NjQtXHQua2lsbF9zYlx0PSBraWxsX2Jsb2NrX3N1cGVyLFxuZnMvdWZzL3N1cGVyLmM6MTQ2NTpcdC5pbml0X2ZzX2NvbnRleHQgPSB1ZnNfaW5pdF9mc19jb250ZXh0LFxuZnMvdWZzL3N1cGVyLmMtMTQ2Ni1cdC5wYXJhbWV0ZXJzXHQ9IHVmc19wYXJhbV9zcGVjLFxuLS1cbmZzL3Vmcy9zdXBlci5jPTE0NzE9c3RhdGljIGludCBfX2luaXQgaW5pdF91ZnNfZnModm9pZClcbi0tXG5mcy91ZnMvc3VwZXIuYy0xNDc1LVx0XHRnb3RvIG91dDE7XG5mcy91ZnMvc3VwZXIuYzoxNDc2Olx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZ1ZnNfZnNfdHlwZSk7XG5mcy91ZnMvc3VwZXIuYy0xNDc3LVx0aWYgKGVycilcbi0tXG5mcy91ZnMvc3VwZXIuYz0xNDg2PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3Vmc19mcyh2b2lkKVxuZnMvdWZzL3N1cGVyLmMtMTQ4Ny17XG5mcy91ZnMvc3VwZXIuYzoxNDg4Olx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNnVmc19mc190eXBlKTtcbmZzL3Vmcy9zdXBlci5jLTE0ODktXHRkZXN0cm95X2lub2RlY2FjaGUoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg3MgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVRlMgVnVsbmVyYWJpbGl0eTogQSBGdXp6aW5nIE9wcG9ydHVuaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSBgdWZzX3JlYWRfY3lsaW5kZXIoKWAsIGlzIHZhbGlkYXRpbmcgdGhlIGN5bGluZGVyIGdyb3VwIGRhdGEgcmVhZCBmcm9tIGRpc2ssIGZvY3VzaW5nIG9uIHRoZSBmcmVlIGJpdG1hcCYjMzk7cyBpbnRlZ3JpdHkuIEl0JiMzOTtzIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGZyZWUgYml0bWFwIGRvbiYjMzk7dCBleGNlZWQgdGhlIGFsbG9jYXRlZCBidWZmZXIgc2l6ZS4gSWYgdGhleSBkbywgaXQmIzM5O3MgYSBjcml0aWNhbCBlcnJvciwgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgd2hlbiB0aGUgZnJlZSBiaXRtYXAgaXMgbWFuaXB1bGF0ZWQuIFByZXR0eSBzdGFuZGFyZCBmaWxlc3lzdGVtIGVycm9yIGhhbmRsaW5nLCByZWFsbHkuCgpJcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5ISBGaWxlc3lzdGVtIGZ1enppbmcgaXMgYSBnb2xkIHN0YW5kYXJkIHRhcmdldCBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIgYW5kIHN5ei1jbHVzdGVyLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb3VudGluZyBjb3JydXB0ZWQgZGlzayBpbWFnZXMgYW5kIHBva2luZyBhdCB0aGUgZmlsZXN5c3RlbSBjb3JlIOKAkyBibG9jayBhbGxvY2F0aW9uLCBmaWxlIGNyZWF0aW9uLCBkZWxldGlvbiwgZXRjLiDigJMgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBleHBvc2UgdnVsbmVyYWJpbGl0aWVzLiBBbmQgdGhpcyBwYXRjaCBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgVUZTIGxvZ2ljLgoKTm93LCB3aGVyZSBjYW4gd2UgZXZlbiBoaXQgdGhpcyBjb2RlPyBVRlMgaXMgYSBjb3JlIGZpbGVzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAoYENPTkZJR19VRlNfRlNgKSwgc28gdGhhdCYjMzk7cyBnb29kLiBJdCBjYW4gYmUgbW91bnRlZCBvbiBsb29wIGRldmljZXMgb3IgcmFtZGlza3Mgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBnaXZlcyB1cyBwbGVudHkgb2YgZmxleGliaWxpdHkuIFdlIG5lZWQgYENPTkZJR19VRlNfRlNgLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGBDT05GSUdfVUZTX0ZTX1dSSVRFYD8gRG9lcyByZWFkLXdyaXRlIGFjY2VzcyBpbnRyb2R1Y2UgbW9yZSBhdHRhY2sgc3VyZmFjZT8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXRoZXIgYHVmc19sb2FkX2N5bGluZGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVhZC1vbmx5ICphbmQqIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIGxvb2sgYXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIHNob3VsZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBjYWxscyBgdWZzX2xvYWRfY3lsaW5kZXJgIGFuZCBgdWZzX3JlYWRfY3lsaW5kZXJgLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNhbGxlcnMsIGluIGBiYWxsb2MuY2AsIGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gYHVmc19mcmVlX2ZyYWdtZW50c2AsIGB1ZnNfZnJlZV9ibG9ja3NgLCBgdWZzX2FkZF9mcmFnbWVudHNgLCBhbmQgYHVmc19hbGxvY19mcmFnbWVudHNgLiBUaGVuIGluIGBpYWxsb2MuY2AsIGB1ZnNfZnJlZV9pbm9kZWAsIGFuZCBgdWZzX25ld19pbm9kZWAuIEFuZCBmaW5hbGx5LCBpbiBgc3VwZXIuY2AsIHdlIGhhdmUgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgLiBIbW0sIGRvZXMgKnRoYXQqIGNhbGwgYHVmc19sb2FkX2N5bGluZGVyYD8gTmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc3VwZXIuY2AgcGF0aC4gU28gbWFueSB0aGluZ3MgdG91Y2hpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3VmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cbmZzL3Vmcy9jeWxpbmRlci5jOjI5OnN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbi0tXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IFVGU19DR05PX0VNUFRZO1xuZnMvdWZzL2N5bGluZGVyLmM6OTI6XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuZnMvdWZzL2N5bGluZGVyLmMtOTMtXHRyZXR1cm4gZmFsc2U7XG4tLVxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cdFx0fSBlbHNlIHtcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcdFx0XHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXHRcdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTIxMy1cdFx0c2JpLVx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XHRcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCAwKSkpIHtcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cdFx0XHRVRlNEKFwmIzM0O0VYSVQgKEZBSUxFRClcXG5cJiMzNDspO1xuLS1cbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTQ1My0gKi9cbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XG4tLVxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyMTctXHRpZiAoIXNiX3Jkb25seShzYikpXG5mcy91ZnMvc3VwZXIuYzoxMjE4Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cdFx0XHRnb3RvIGZhaWxlZDtcbi0tXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMjkzLVx0XHR9XG5mcy91ZnMvc3VwZXIuYzoxMjk0Olx0XHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XG5mcy91ZnMvc3VwZXIuYy0xMjk1LVx0XHRcdHByX2VycihcJiMzNDtmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIFVGUyBXcml0ZSBDYXBhYmlsaXR5KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIHRoZSBgQ09ORklHX1VGU19GU19XUklURWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIG9idmlvdXMsIGRvZXMgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBhbGxvdyBtZSB0byB3cml0ZSB0byBVRlMuIFNlY29uZGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJhY3RpY2FsIGltcGxpY2F0aW9ucywgc28gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZnMvdWZzYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlIGFyZSBjb25kaXRpb25hbGl6ZWQgYmFzZWQgb24gdGhpcyBmbGFnLCB3aGljaCwgb2YgY291cnNlLCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzZXQsIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19VRlNfRlNfV1JJVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy91ZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTczOC1cbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcbmZzL3Vmcy9zdXBlci5jLTc0MC1cdGlmICghc2JfcmRvbmx5KHNiKSkge1xuLS1cbmZzL3Vmcy9zdXBlci5jPTEyMzg9c3RhdGljIGludCB1ZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL3Vmcy9zdXBlci5jLTEyNzktXHQgKi9cbmZzL3Vmcy9zdXBlci5jOjEyODA6I2lmbmRlZiBDT05GSUdfVUZTX0ZTX1dSSVRFXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVx0XHRwcl9lcnIoXCYjMzQ7dWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4mIzM5O3QgYmUgbW91bnRlZCBhcyByZWFkLXdyaXRlXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVUZTIFdyaXRlIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gaWYgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzbiYjMzk7dCBlbmFibGVkLCBVRlMgaXMgc3R1Y2sgaW4gcmVhZC1vbmx5IG1vZGUuIFRoYXQgbWFrZXMgc2Vuc2UuIFdoZW4gd2UmIzM5O3JlIG1vdW50aW5nIHJlYWQtd3JpdGUsIGB1ZnNfZmlsbF9zdXBlcmAga2lja3Mgb2ZmIHRoZSBwcm9jZXNzIGFuZCBjYWxscyBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AsIGFuZCB0aGluZ3MgbGlrZSBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgZGF0YSB3aWxsIHRoZW4gdXNlIGB1ZnNfbG9hZF9jeWxpbmRlcmAsIHdoaWNoIGNhbGxzIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIFJpZ2h0LCBzbyBib3RoIGBDT05GSUdfVUZTX0ZTYCBhbmQgYENPTkZJR19VRlNfRlNfV1JJVEVgIGFyZSBrZXkgZm9yIHRlc3RpbmcgVUZTIHdyaXRlIGFuZCB0aGVzZSBjeWxpbmRlciBvcGVyYXRpb25zLgoKTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGRlcGVuZGVuY2llcyBzZXQgY29ycmVjdGx5LiBMb29raW5nIGF0IGBmcy91ZnMvS2NvbmZpZ2AsIEkgc2VlOgoKYGNvbmZpZyBVRlNfRlNgIGRlcGVuZHMgb24gYEJMT0NLYCBhbmQgc2VsZWN0cyBgQlVGRkVSX0hFQURgLgpgY29uZmlnIFVGU19GU19XUklURWAgZGVwZW5kcyBvbiBgVUZTX0ZTYC4KCmBCTE9DS2AgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlnLCBzbyB0aGF0IHNob3VsZG4mIzM5O3QgYmUgYW4gaXNzdWUuIFNvLCB0aGUga2V5IGNvbmZpZ3MgdG8gZW5hYmxlIGFyZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdvb2QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scy4gYHVmc19sb2FkX2N5bGluZGVyYCBpcyB0aGUgZXhwb3J0ZWQsIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCB0aGF0IHVsdGltYXRlbHkgY2FsbHMgYHVmc19yZWFkX2N5bGluZGVyYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBvciByZWxhdGVkIG9uZXMuIExldCYjMzk7cyBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIGBmcy91ZnMvY3lsaW5kZXIuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Vmcy9jeWxpbmRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Vmcy9jeWxpbmRlci5jLTI4LSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL3Vmcy9jeWxpbmRlci5jLTMwLVx0dW5zaWduZWQgY2dubywgdW5zaWduZWQgYml0bWFwX25yKVxuLS1cbmZzL3Vmcy9jeWxpbmRlci5jLTk5LSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6MTAwOnZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGJpdG1hcF9ucilcbmZzL3Vmcy9jeWxpbmRlci5jLTEwMS17XG4tLVxuZnMvdWZzL2N5bGluZGVyLmMtMTQzLSAqL1xuZnMvdWZzL2N5bGluZGVyLmM6MTQ0OnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxuZnMvdWZzL2N5bGluZGVyLmMtMTQ1LVx0c3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGNnbm8pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTM5CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDMxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVUZTIEN5bGluZGVyIEdyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcHV0X2N5bGluZGVyYCByZXNpZGUgd2l0aGluIGBjeWxpbmRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwYXRjaCBtb2RpZnlpbmcgdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gYHVmc19yZWFkX2N5bGluZGVyYCwgd2hpY2ggYHVmc19sb2FkX2N5bGluZGVyYCBkaXJlY3RseSBjYWxscywgdGhhdCBkZWZpbml0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLgoKVG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBJJiMzOTttIGNoZWNraW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5IHRoYXQgZGVhbCB3aXRoIGN5bGluZGVyIGdyb3Vwczogc3BlY2lmaWNhbGx5IGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19hbGxvY19mcmFnbWVudHNgLCBgdWZzX25ld19mcmFnbWVudHNgLCBgdWZzX25ld19pbm9kZWAsIGFuZCBgdWZzX2ZyZWVfaW5vZGVgLiBJIGhhZCB0byBjb25maXJtIHRoYXQgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIGluIGBzdXBlci5jYCBpcyBzdGF0aWMgKGl0IGlzISkgYW5kIHRoZSBzYW1lIGZvciBgdWZzX2ZpbGxfc3VwZXJgLiBTbyB0aGF0IHJ1bGVzIHRob3NlIG91dCBvZiBteSBjb3JlIGludGVyZXN0LgoKVGhlcmVmb3JlLCBgdWZzX2xvYWRfY3lsaW5kZXJgLCBgdWZzX2ZyZWVfZnJhZ21lbnRzYCwgYHVmc19mcmVlX2Jsb2Nrc2AsIGB1ZnNfbmV3X2lub2RlYCwgYW5kIGB1ZnNfZnJlZV9pbm9kZWAgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBhbmFseXNpcy4gQmVjYXVzZSBgdWZzX2xvYWRfY3lsaW5kZXJgICpkaXJlY3RseSogY2FsbHMgdGhlIG1vZGlmaWVkIGB1ZnNfcmVhZF9jeWxpbmRlcmAgZnVuY3Rpb24sIGl0JiMzOTtzIHRoZSBtb3N0IGRpcmVjdCBub24tc3RhdGljIHN5bWJvbCBvZiBpbnRlcmVzdC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdmVyaWZ5IGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlsczogdGhlIGZ1enppbmcgaXMgY29uc2lkZXJlZCB3b3J0aHdoaWxlIChgV29ydGhGdXp6aW5nOiB0cnVlYCkgYW5kIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQgKGBVRlNfRlNgLCBgVUZTX0ZTX1dSSVRFYCkuIFRoZSBpbml0aWFsIGZvY3VzIHN5bWJvbCBsaXN0IGNvdWxkIGJlIGFsbCBvZiB0aG9zZSBtZW50aW9uZWQsIG9yIEkgY2FuIGZvY3VzIG9uIGB1ZnNfbG9hZF9jeWxpbmRlcmAgYWxvbmUgdG8gbmFycm93IHRoaW5ncy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VUZTX0ZTJiMzNDssCiAgICAmIzM0O1VGU19GU19XUklURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Vmc19sb2FkX2N5bGluZGVyJiMzNDssCiAgICAmIzM0O3Vmc19uZXdfaW5vZGUmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfaW5vZGUmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfZnJhZ21lbnRzJiMzNDssCiAgICAmIzM0O3Vmc19mcmVlX2Jsb2NrcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB1ZnNfcmVhZF9jeWxpbmRlcigpIGluIHRoZSBVRlMgZmlsZXN5c3RlbSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhhdCBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcHMgZml0IHdpdGhpbiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIG1vdW50aW5nIGFuZCBtb2RpZnlpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGxvb3AgZGV2aWNlcyBvciBkaXNrIGltYWdlcyBhbmQgaXMgd2VsbCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVRlNfRlMmIzM0OywKICAgICYjMzQ7VUZTX0ZTX1dSSVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWZzX2xvYWRfY3lsaW5kZXImIzM0OywKICAgICYjMzQ7dWZzX25ld19pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9pbm9kZSYjMzQ7LAogICAgJiMzNDt1ZnNfZnJlZV9mcmFnbWVudHMmIzM0OywKICAgICYjMzQ7dWZzX2ZyZWVfYmxvY2tzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cblxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDZhYzg0YjQxYzNmYmQ3NDM0OWRjZTBiMDA4YzMzZjAzZGNlMmU2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMDc6MjM6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy91ZnMvY3lsaW5kZXIuYyBiL2ZzL3Vmcy9jeWxpbmRlci5jCmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9jeWxpbmRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Vmcy9jeWxpbmRlci5jCkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTsKIAlzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVjcGk7CiAJc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZzsKJiM0MzsJdTY0IGNnX2J5dGVzLCBmcmVlX2JpdG1hcF9ieXRlczsKJiM0MzsJY29uc3QgY2hhciAqZXJyOwogCXVuc2lnbmVkIGksIGo7CiAKIAlVRlNEKCYjMzQ7RU5URVIsIGNnbm8gJXUsIGJpdG1hcF9uciAldVxuJiMzNDssIGNnbm8sIGJpdG1hcF9ucik7CkBAIC00OCw4ICYjNDM7NTAsMTAgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbMF0gPSBzYmktJmd0O3NfdWNnW2Nnbm9dOwogCWZvciAoaSA9IDE7IGkgJmx0OyBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiAJCVVDUElfVUJIKHVjcGkpLSZndDtiaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7ZnJhZ21lbnQgJiM0MzsgaSk7Ci0JCWlmICghVUNQSV9VQkgodWNwaSktJmd0O2JoW2ldKQomIzQzOwkJaWYgKCFVQ1BJX1VCSCh1Y3BpKS0mZ3Q7YmhbaV0pIHsKJiM0MzsJCQllcnIgPSAmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1JiMzNDs7CiAJCQlnb3RvIGZhaWxlZDsKJiM0MzsJCX0KIAl9CiAJc2JpLSZndDtzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87CiAJCQkKQEAgLTY4LDYgJiM0Mzs3MiwxNiBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCXVjcGktJmd0O2NfY2x1c3RlcnN1bW9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctJmd0O2NnX3UuY2dfNDQuY2dfY2x1c3RlcnN1bW9mZik7CiAJdWNwaS0mZ3Q7Y19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy0mZ3Q7Y2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTsKIAl1Y3BpLSZndDtjX25jbHVzdGVyYmxrcyA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctJmd0O2NnX3UuY2dfNDQuY2dfbmNsdXN0ZXJibGtzKTsKJiM0MzsKJiM0MzsJY2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS0mZ3Q7Y291bnQgKiBzYi0mZ3Q7c19ibG9ja3NpemU7CiYjNDM7CWZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktJmd0O3NfZnBnKTsKJiM0MzsJLyogVGhlIGZ1bGwgZnJlZSBiaXRtYXAgbXVzdCBmaXQgaW4gdGhlIGxvYWRlZCBDRyBidWZmZXIuICovCiYjNDM7CWlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHwKJiM0MzsJICAgICh1NjQpdWNwaS0mZ3Q7Y19mcmVlb2ZmICYjNDM7IGZyZWVfYml0bWFwX2J5dGVzICZndDsgY2dfYnl0ZXMpIHsKJiM0MzsJCWVyciA9ICYjMzQ7Y3lsaW5kZXIgZ3JvdXAgJXUgaGFzIGludmFsaWQgZnJlZSBiaXRtYXAmIzM0OzsKJiM0MzsJCWdvdG8gZmFpbGVkOwomIzQzOwl9CiYjNDM7CiAJVUZTRCgmIzM0O0VYSVRcbiYjMzQ7KTsKIAlyZXR1cm4gdHJ1ZTsKIAkKQEAgLTc1LDcgJiM0Mzs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJZm9yIChqID0gMTsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQogCQlicmVsc2UoVUNQSV9VQkgodWNwaSktJmd0O2JoW2pdKTsKIAlzYmktJmd0O3NfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7Ci0JdWZzX2Vycm9yIChzYiwgJiMzNDt1ZnNfcmVhZF9jeWxpbmRlciYjMzQ7LCAmIzM0O2NhbiYjMzk7dCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1JiMzNDssIGNnbm8pOwomIzQzOwl1ZnNfZXJyb3Ioc2IsICYjMzQ7dWZzX3JlYWRfY3lsaW5kZXImIzM0OywgZXJyLCBjZ25vKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBhIHBhdGNoIGZvciBgZnMvdWZzL2N5bGluZGVyLmNgLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoYXQgaXQgZG9lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgVUZTIGZpbGVzeXN0ZW0uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IGN5bGluZGVyIGdyb3VwcyBhcmUgYSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgVUZTLCBzbyB0aGlzIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suCgpUaGUgZGlmZiBpdHNlbGYgcHJvdmlkZXMgdGhlIGZpcnN0IGNsdWUuIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBkZWFscyB3aXRoIHJlYWRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGRpc2suIFRoZSBhZGRlZCBjb2RlIGludHJvZHVjZXMgdHdvIG5ldyB2YXJpYWJsZXMsIGBjZ19ieXRlc2AgYW5kIGBmcmVlX2JpdG1hcF9ieXRlc2AsIGJvdGggb2Ygd2hpY2ggYXJlIG9mIHR5cGUgYHU2NGAuIEkgc3VzcGVjdCB0aGVzZSB3aWxsIGJlIHVzZWQgZm9yIHNvbWUgY3J1Y2lhbCBzaXplIGNoZWNrcy4gVGhlIHZhcmlhYmxlIGBlcnJgIG9mIHR5cGUgYGNvbnN0IGNoYXIgKmAgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYWRkZWQuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgYSBuZXcgdmFsaWRhdGlvbiBzdGVwLiBUaGUgcGF0Y2ggbm93IGNhbGN1bGF0ZXMgdGhlIHNpemUgb2YgdGhlIGN5bGluZGVyIGdyb3VwIGluIGJ5dGVzIChgY2dfYnl0ZXNgKSBhbmQgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGZyZWUgYml0bWFwIChgZnJlZV9iaXRtYXBfYnl0ZXNgKS4gVGhlIGBCSVRTX1RPX0JZVEVTYCBtYWNybyBpcyBhIGNsZWFyIGluZGljYXRpb24gdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjYWxjdWxhdGluZyB0aGUgc2l6ZSBpbiBieXRlcyBmcm9tIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUgYml0bWFwLCB3aGljaCBpcyBxdWl0ZSBjb21tb24gZm9yIHRoaXMgdHlwZSBvZiBhbGxvY2F0aW9uIGRhdGEuCgpUaGUgc3Vic2VxdWVudCBgaWZgIHN0YXRlbWVudCBpcyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBraWNrcyBpbi4gSXQgY2hlY2tzIGlmIHRoZSBgZnJlZV9iaXRtYXBfYnl0ZXNgIGlzIHZhbGlkIGFuZCBpZiB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBmcmVlIGJpdG1hcCBwbHVzIGl0cyBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlci4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgbWFsZm9ybWVkIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMuIFRoZSBgZXJyYCB2YXJpYWJsZSwgd2hpY2ggd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGlmIHN0YXRlbWVudCBpcyB0cnVlLCB3aWxsIGFsc28gYmUgcGFzc2VkIGludG8gdGhlIGB1ZnNfZXJyb3JgIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIHNvbWUgbW9yZSBkZXRhaWxlZCBhbmQgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMgYXMgY29tcGFyZWQgdG8gdGhlIG9uZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW4gdGhlIGNvZGUuCgpHaXZlbiBteSBrbm93bGVkZ2Ugb2YgVUZTLCBJJiMzOTtkIGltbWVkaWF0ZWx5IHdhbnQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgZmlsZXMuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIGNhbGxlZCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgcmVseSBvbiB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hlY2tzIGJlaW5nIGRvbmUuIEkgc2hvdWxkIGtub3cgd2hhdCBpbXBhY3QgdGhlIGNoYW5nZXMgbWF5IGhhdmUgb24gcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdWZzL2N5bGluZGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDk1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGxpbnV4L2ZzL3Vmcy9jeWxpbmRlci5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDE5OThcbiAgIDY6XHQgKiBEYW5pZWwgUGlya2wgXHUwMDNjZGFuaWVsLnBpcmtsQGVtYWlsLmN6XHUwMDNlXG4gICA3Olx0ICogQ2hhcmxlcyBVbml2ZXJzaXR5LCBGYWN1bHR5IG9mIE1hdGhlbWF0aWNzIGFuZCBQaHlzaWNzXG4gICA4Olx0ICpcbiAgIDk6XHQgKiAgZXh0MiAtIGlub2RlIChibG9jaykgYml0bWFwIGNhY2hpbmcgaW5zcGlyZWRcbiAgMTA6XHQgKi9cbiAgMTE6XHRcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdC5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICAxNzpcdFxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2FzbS9ieXRlb3JkZXIuaFx1MDAzZVxuICAxOTpcdFxuICAyMDpcdCNpbmNsdWRlIFwmIzM0O3Vmc19mcy5oXCYjMzQ7XG4gIDIxOlx0I2luY2x1ZGUgXCYjMzQ7dWZzLmhcJiMzNDtcbiAgMjI6XHQjaW5jbHVkZSBcJiMzNDtzd2FiLmhcJiMzNDtcbiAgMjM6XHQjaW5jbHVkZSBcJiMzNDt1dGlsLmhcJiMzNDtcbiAgMjQ6XHRcbiAgMjU6XHQvKlxuICAyNjpcdCAqIFJlYWQgY3lsaW5kZXIgZ3JvdXAgaW50byBjYWNoZS4gVGhlIG1lbW9yeSBzcGFjZSBmb3IgdWZzX2NnX3ByaXZhdGVfaW5mb1xuICAyNzpcdCAqIHN0cnVjdHVyZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdWZzX3JlYWRfc3VwZXIuXG4gIDI4Olx0ICovXG4gIDI5Olx0c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiAgMzA6XHRcdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcbiAgMzE6XHR7XG4gIDMyOlx0XHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xuICAzMzpcdFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xuICAzNDpcdFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xuICAzNTpcdFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcbiAgMzY6XHRcdHU2NCBjZ19ieXRlcywgZnJlZV9iaXRtYXBfYnl0ZXM7XG4gIDM3Olx0XHRjb25zdCBjaGFyICplcnI7XG4gIDM4Olx0XHR1bnNpZ25lZCBpLCBqO1xuICAzOTpcdFxuICA0MDpcdFx0VUZTRChcJiMzNDtFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxuXCYjMzQ7LCBjZ25vLCBiaXRtYXBfbnIpO1xuICA0MTpcdFx0dXNwaSA9IHNiaS1cdTAwM2VzX3VzcGk7XG4gIDQyOlx0XHR1Y3BpID0gc2JpLVx1MDAzZXNfdWNwaVtiaXRtYXBfbnJdO1xuICA0MzpcdFx0dWNnID0gKHN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgKilzYmktXHUwMDNlc191Y2dbY2dub10tXHUwMDNlYl9kYXRhO1xuICA0NDpcdFxuICA0NTpcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlZnJhZ21lbnQgPSB1ZnNfY2djbWluKGNnbm8pO1xuICA0NjpcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQgPSB1c3BpLVx1MDAzZXNfY2dzaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuICA0NzpcdFx0LypcbiAgNDg6XHRcdCAqIFdlIGhhdmUgYWxyZWFkeSB0aGUgZmlyc3QgZnJhZ21lbnQgb2YgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgaW4gYnVmZmVyXG4gIDQ5Olx0XHQgKi9cbiAgNTA6XHRcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoWzBdID0gc2JpLVx1MDAzZXNfdWNnW2Nnbm9dO1xuICA1MTpcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgVUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gIDUyOlx0XHRcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLVx1MDAzZWZyYWdtZW50ICYjNDM7IGkpO1xuICA1MzpcdFx0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKSB7XG4gIDU0Olx0XHRcdFx0ZXJyID0gXCYjMzQ7Y2FuJiMzOTt0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcJiMzNDs7XG4gIDU1Olx0XHRcdFx0Z290byBmYWlsZWQ7XG4gIDU2Olx0XHRcdH1cbiAgNTc6XHRcdH1cbiAgNTg6XHRcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87XG4gIDU5Olx0XHRcdFx0XG4gIDYwOlx0XHR1Y3BpLVx1MDAzZWNfY2d4XHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfY2d4KTtcbiAgNjE6XHRcdHVjcGktXHUwMDNlY19uY3lsXHQ9IGZzMTZfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfbmN5bCk7XG4gIDYyOlx0XHR1Y3BpLVx1MDAzZWNfbmlibGtcdD0gZnMxNl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19uaWJsayk7XG4gIDYzOlx0XHR1Y3BpLVx1MDAzZWNfbmRibGtcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19uZGJsayk7XG4gIDY0Olx0XHR1Y3BpLVx1MDAzZWNfcm90b3JcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19yb3Rvcik7XG4gIDY1Olx0XHR1Y3BpLVx1MDAzZWNfZnJvdG9yXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfZnJvdG9yKTtcbiAgNjY6XHRcdHVjcGktXHUwMDNlY19pcm90b3JcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19pcm90b3IpO1xuICA2NzpcdFx0dWNwaS1cdTAwM2VjX2J0b3RvZmZcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ19idG90b2ZmKTtcbiAgNjg6XHRcdHVjcGktXHUwMDNlY19ib2ZmXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfYm9mZik7XG4gIDY5Olx0XHR1Y3BpLVx1MDAzZWNfaXVzZWRvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX2l1c2Vkb2ZmKTtcbiAgNzA6XHRcdHVjcGktXHUwMDNlY19mcmVlb2ZmXHQ9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfZnJlZW9mZik7XG4gIDcxOlx0XHR1Y3BpLVx1MDAzZWNfbmV4dGZyZWVvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX25leHRmcmVlb2ZmKTtcbiAgNzI6XHRcdHVjcGktXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xuICA3MzpcdFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3Rlcm9mZik7XG4gIDc0Olx0XHR1Y3BpLVx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XG4gIDc1Olx0XG4gIDc2Olx0XHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50ICogc2ItXHUwMDNlc19ibG9ja3NpemU7XG4gIDc3Olx0XHRmcmVlX2JpdG1hcF9ieXRlcyA9IEJJVFNfVE9fQllURVMoKHU2NCl1c3BpLVx1MDAzZXNfZnBnKTtcbiAgNzg6XHRcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuICA3OTpcdFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxuICA4MDpcdFx0ICAgICh1NjQpdWNwaS1cdTAwM2VjX2ZyZWVvZmYgJiM0MzsgZnJlZV9iaXRtYXBfYnl0ZXMgXHUwMDNlIGNnX2J5dGVzKSB7XG4gIDgxOlx0XHRcdGVyciA9IFwmIzM0O2N5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXCYjMzQ7O1xuICA4MjpcdFx0XHRnb3RvIGZhaWxlZDtcbiAgODM6XHRcdH1cbiAgODQ6XHRcbiAgODU6XHRcdFVGU0QoXCYjMzQ7RVhJVFxcblwmIzM0Oyk7XG4gIDg2Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgODc6XHRcdFxuICA4ODpcdGZhaWxlZDpcbiAgODk6XHRcdGZvciAoaiA9IDE7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuICA5MDpcdFx0XHRicmVsc2UoVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbal0pO1xuICA5MTpcdFx0c2JpLVx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XG4gIDkyOlx0XHR1ZnNfZXJyb3Ioc2IsIFwmIzM0O3Vmc19yZWFkX2N5bGluZGVyXCYjMzQ7LCBlcnIsIGNnbm8pO1xuICA5MzpcdFx0cmV0dXJuIGZhbHNlO1xuICA5NDpcdH1cbiAgOTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMwoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYSBzYW5pdHkgY2hlY2sgd2l0aGluIHRoZSBVRlMgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYHVmc19yZWFkX2N5bGluZGVyYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBwYXRjaOKAmXMgaW1wYWN0LCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgYW5kIHNwZWNpZmljYWxseSwgS01TQU4uIFRoZSBwYXRjaCBhZGRzIGNoZWNrcyBvbiBgdWNwaS0mZ3Q7Y19mcmVlb2ZmYCBhbmQgdGhlIGNhbGN1bGF0ZWQgYGZyZWVfYml0bWFwX2J5dGVzYCBhZ2FpbnN0IHRoZSBidWZmZXIgc2l6ZSBgY2dfYnl0ZXNgLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtib3VuZHMgY2hlY2ssJiMzNDsgd2hpY2ggaXMgZXhjZWxsZW50LgoKSSByYW4gdGhyb3VnaCB0aGUgc2NlbmFyaW9zIGluIG15IGhlYWQuIEZpcnN0LCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgYWx3YXlzIHNldCBiZWZvcmUgYW55IHBvdGVudGlhbCBlcnJvciByZXR1cm4gdmlhIGBnb3RvIGZhaWxlZGAuIFNlY29uZCwgdGhlcmUmIzM5O3Mgbm8gZXZpZGVuY2Ugb2Yga2VybmVsIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgd2hpY2ggaXMgYSBtYWpvciB3aW4uIFRoZSBjb2RlIGRvZXNuJiMzOTt0IHRvdWNoIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zLiBUaGlyZCwgdGhlIGJyYW5jaGluZyBsb2dpYyBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsc28gZ29vZC4gRm91cnRoLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24sIHNvIHdlIGFyZSBzYWZlIHRoZXJlLgoKVGhhdCYjMzk7cyB3aGVuIEkgem9vbWVkIGluIG9uIHRoZSBib3VuZHMgY2hlY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGVuc3VyaW5nIHRoYXQgYWNjZXNzaW5nIHRoZSBmcmVlIGJpdG1hcCBkb2VzbiYjMzk7dCBnbyBiZXlvbmQgYGNnX2J5dGVzYC4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc3BhdGlhbCBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbiB0aGF0IEtBU0FOIGV4Y2VscyBhdCBkZXRlY3RpbmcuIEl0IGRpcmVjdGx5IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGNvcnJ1cHRlZCBmaWxlc3lzdGVtcywgd2hpY2ggaXMgZXhhY3RseSB0aGUgdHlwZSBvZiBidWcgS0FTQU4gaXMgYnVpbHQgdG8gZmluZC4KCkkgZG91YmxlLWNoZWNrZWQ6IEtBU0FOIGNvdmVycyBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBrZXJuZWwtdG8tdXNlciBsZWFrcy4gVGhpcyBidWcgaXMgZXhwbGljaXRseSBhYm91dCBhIGJvdW5kcyBjaGVjaywgd2hpY2ggaXMgYSBzcGF0aWFsIHNhZmV0eSBpc3N1ZS4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uLCByZWFkaW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpUbyBzb2xpZGlmeSB0aGlzIGNvbmNsdXNpb24sIEkgcHJlcGFyZWQgYSBjbGVhciByZWFzb25pbmcgc3VtbWFyeS4gVGhpcyBwYXRjaCB2YWxpZGF0ZXMgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcCBhZ2FpbnN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNpemUuIEl0IHByZXZlbnRzIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2VzcyBkdXJpbmcgb3BlcmF0aW9ucyBvbiBwb3RlbnRpYWxseSBjb3JydXB0ZWQgVUZTIGltYWdlcy4gVGhpcyBraW5kIG9mIGFjY2VzcyBpcyBwcmVjaXNlbHkgd2hhdCBLQVNBTiBpcyBpbnRlbmRlZCBmb3IuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyB1bm5lY2Vzc2FyeS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgdmFsaWRhdGlvbiBpbiBgdWZzX3JlYWRfY3lsaW5kZXIoKWAgdG8gdmVyaWZ5IHRoYXQgdGhlIGN5bGluZGVyIGdyb3VwIGZyZWUgYmxvY2sgYml0bWFwIChgY19mcmVlb2ZmYCBwbHVzIGBmcmVlX2JpdG1hcF9ieXRlc2ApIGRvZXMgbm90IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyIChgY2dfYnl0ZXNgKS4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBjeWxpbmRlciBncm91cCBkYXRhIGZyb20gYSBjcmFmdGVkL2NvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlLlxuXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyB2YWxpZGF0aW9uIGluIGB1ZnNfcmVhZF9jeWxpbmRlcigpYCB0byB2ZXJpZnkgdGhhdCB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBibG9jayBiaXRtYXAgKGBjX2ZyZWVvZmZgIHBsdXMgYGZyZWVfYml0bWFwX2J5dGVzYCkgZG9lcyBub3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIgKGBjZ19ieXRlc2ApLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGN5bGluZGVyIGdyb3VwIGRhdGEgZnJvbSBhIGNyYWZ0ZWQvY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2UuXG5cbk91dC1vZi1ib3VuZHMgbWVtb3J5IGVycm9ycyBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjAyLjIzMTM1ODMzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDYwMzcxNDM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVmc19sb2FkX2N5bGluZGVyXCIsXG4gICAgXCJ1ZnNfbmV3X2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfZnJhZ21lbnRzXCIsXG4gICAgXCJ1ZnNfZnJlZV9ibG9ja3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgdmFsaWRhdGlvbiBpbiBgdWZzX3JlYWRfY3lsaW5kZXIoKWAgdG8gdmVyaWZ5IHRoYXQgdGhlIGN5bGluZGVyIGdyb3VwIGZyZWUgYmxvY2sgYml0bWFwIChgY19mcmVlb2ZmYCBwbHVzIGBmcmVlX2JpdG1hcF9ieXRlc2ApIGRvZXMgbm90IGV4Y2VlZCB0aGUgYm91bmRzIG9mIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyIChgY2dfYnl0ZXNgKS4gVGhpcyBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBjeWxpbmRlciBncm91cCBkYXRhIGZyb20gYSBjcmFmdGVkL2NvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlLlxcblxcbk91dC1vZi1ib3VuZHMgbWVtb3J5IGVycm9ycyBhcmUgc3BhdGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBmdWxseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3Iga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDIuMjMxMzYzNjA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI3OTI1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMDc6MjM6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL2N5bGluZGVyLmMgYi9mcy91ZnMvY3lsaW5kZXIuY1xcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XFxuLS0tIGEvZnMvdWZzL2N5bGluZGVyLmNcXG4rKysgYi9mcy91ZnMvY3lsaW5kZXIuY1xcbkBAIC0zMyw2ICszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcXG4gXFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xcbiBcXHRzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnO1xcbitcXHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xcbitcXHRjb25zdCBjaGFyICplcnI7XFxuIFxcdHVuc2lnbmVkIGksIGo7XFxuIFxcbiBcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxcXG5cXFwiLCBjZ25vLCBiaXRtYXBfbnIpO1xcbkBAIC00OCw4ICs1MCwxMCBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbMF0gPSBzYmktXFx1MDAzZXNfdWNnW2Nnbm9dO1xcbiBcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgVUNQSV9VQkgodWNwaSktXFx1MDAzZWNvdW50OyBpKyspIHtcXG4gXFx0XFx0VUNQSV9VQkgodWNwaSktXFx1MDAzZWJoW2ldID0gc2JfYnJlYWQoc2IsIFVDUElfVUJIKHVjcGkpLVxcdTAwM2VmcmFnbWVudCArIGkpO1xcbi1cXHRcXHRpZiAoIVVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtpXSlcXG4rXFx0XFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbaV0pIHtcXG4rXFx0XFx0XFx0ZXJyID0gXFxcImNhbid0IHJlYWQgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgJXVcXFwiO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xcbiBcXHRcXHRcXHRcXG5AQCAtNjgsNiArNzIsMTYgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTtcXG4gXFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcXG4gXFx0dWNwaS1cXHUwMDNlY19uY2x1c3RlcmJsa3MgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XFxuK1xcbitcXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCAqIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4rXFx0ZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS1cXHUwMDNlc19mcGcpO1xcbitcXHQvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi9cXG4rXFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxcbitcXHQgICAgKHU2NCl1Y3BpLVxcdTAwM2VjX2ZyZWVvZmYgKyBmcmVlX2JpdG1hcF9ieXRlcyBcXHUwMDNlIGNnX2J5dGVzKSB7XFxuK1xcdFxcdGVyciA9IFxcXCJjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcFxcXCI7XFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbitcXHR9XFxuK1xcbiBcXHRVRlNEKFxcXCJFWElUXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcbkBAIC03NSw3ICs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIFxcdGZvciAoaiA9IDE7IGogXFx1MDAzYyBpOyBqKyspXFxuIFxcdFxcdGJyZWxzZShVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlYmhbal0pO1xcbiBcXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuLVxcdHVmc19lcnJvciAoc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIFxcXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XFxcIiwgY2dubyk7XFxuK1xcdHVmc19lcnJvcihzYiwgXFxcInVmc19yZWFkX2N5bGluZGVyXFxcIiwgZXJyLCBjZ25vKTtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzowMi41NzQ3OTM2MDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzMzI3MzI0MTc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVRlNfRlNcIixcbiAgICBcIlVGU19GU19XUklURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVmc19sb2FkX2N5bGluZGVyXCIsXG4gICAgXCJ1ZnNfbmV3X2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfZnJhZ21lbnRzXCIsXG4gICAgXCJ1ZnNfZnJlZV9ibG9ja3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byB1ZnNfcmVhZF9jeWxpbmRlcigpIGluIHRoZSBVRlMgZmlsZXN5c3RlbSBkcml2ZXIgdG8gdmFsaWRhdGUgdGhhdCBjeWxpbmRlciBncm91cCBmcmVlIGJpdG1hcHMgZml0IHdpdGhpbiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIG1vdW50aW5nIGFuZCBtb2RpZnlpbmcgY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2VzLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIGxvb3AgZGV2aWNlcyBvciBkaXNrIGltYWdlcyBhbmQgaXMgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NmFjODRiNDFjM2ZiZDc0MzQ5ZGNlMGIwMDhjMzNmMDNkY2UyZTY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAwNzoyMzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Vmcy9jeWxpbmRlci5jIGIvZnMvdWZzL2N5bGluZGVyLmNcbmluZGV4IGEyODEzMjcwYzMwM2UuLmZlYzZjOWRmYjA1NWQgMTAwNjQ0XG4tLS0gYS9mcy91ZnMvY3lsaW5kZXIuY1xuKysrIGIvZnMvdWZzL2N5bGluZGVyLmNcbkBAIC0zMyw2ICszMyw4IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqIHVzcGk7XG4gXHRzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVjcGk7XG4gXHRzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnO1xuK1x0dTY0IGNnX2J5dGVzLCBmcmVlX2JpdG1hcF9ieXRlcztcbitcdGNvbnN0IGNoYXIgKmVycjtcbiBcdHVuc2lnbmVkIGksIGo7XG4gXG4gXHRVRlNEKFwiRU5URVIsIGNnbm8gJXUsIGJpdG1hcF9uciAldVxcblwiLCBjZ25vLCBiaXRtYXBfbnIpO1xuQEAgLTQ4LDggKzUwLDEwIEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFswXSA9IHNiaS1cdTAwM2VzX3VjZ1tjZ25vXTtcbiBcdGZvciAoaSA9IDE7IGkgXHUwMDNjIFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50OyBpKyspIHtcbiBcdFx0VUNQSV9VQkgodWNwaSktXHUwMDNlYmhbaV0gPSBzYl9icmVhZChzYiwgVUNQSV9VQkgodWNwaSktXHUwMDNlZnJhZ21lbnQgKyBpKTtcbi1cdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSlcbitcdFx0aWYgKCFVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSkge1xuK1x0XHRcdGVyciA9IFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVwiO1xuIFx0XHRcdGdvdG8gZmFpbGVkO1xuK1x0XHR9XG4gXHR9XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xuIFx0XHRcdFxuQEAgLTY4LDYgKzcyLDE2IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHR1Y3BpLVx1MDAzZWNfY2x1c3RlcnN1bW9mZiA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyc3Vtb2ZmKTtcbiBcdHVjcGktXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJvZmYpO1xuIFx0dWNwaS1cdTAwM2VjX25jbHVzdGVyYmxrcyA9IGZzMzJfdG9fY3B1KHNiLCB1Y2ctXHUwMDNlY2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpO1xuK1xuK1x0Y2dfYnl0ZXMgPSBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2Vjb3VudCAqIHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0ZnJlZV9iaXRtYXBfYnl0ZXMgPSBCSVRTX1RPX0JZVEVTKCh1NjQpdXNwaS1cdTAwM2VzX2ZwZyk7XG4rXHQvKiBUaGUgZnVsbCBmcmVlIGJpdG1hcCBtdXN0IGZpdCBpbiB0aGUgbG9hZGVkIENHIGJ1ZmZlci4gKi9cbitcdGlmICghZnJlZV9iaXRtYXBfYnl0ZXMgfHxcbitcdCAgICAodTY0KXVjcGktXHUwMDNlY19mcmVlb2ZmICsgZnJlZV9iaXRtYXBfYnl0ZXMgXHUwMDNlIGNnX2J5dGVzKSB7XG4rXHRcdGVyciA9IFwiY3lsaW5kZXIgZ3JvdXAgJXUgaGFzIGludmFsaWQgZnJlZSBiaXRtYXBcIjtcbitcdFx0Z290byBmYWlsZWQ7XG4rXHR9XG4rXG4gXHRVRlNEKFwiRVhJVFxcblwiKTtcbiBcdHJldHVybiB0cnVlO1xuIFx0XG5AQCAtNzUsNyArODksNyBAQCBzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0Zm9yIChqID0gMTsgaiBcdTAwM2MgaTsgaisrKVxuIFx0XHRicmVsc2UoVUNQSV9VQkgodWNwaSktXHUwMDNlYmhbal0pO1xuIFx0c2JpLVx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XG4tXHR1ZnNfZXJyb3IgKHNiLCBcInVmc19yZWFkX2N5bGluZGVyXCIsIFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVwiLCBjZ25vKTtcbitcdHVmc19lcnJvcihzYiwgXCJ1ZnNfcmVhZF9jeWxpbmRlclwiLCBlcnIsIGNnbm8pO1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjAyLjU3NDc5NTEyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNDg4ODQyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBVRlMgQ3lsaW5kZXIgUmVhZCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBwaW5wb2ludGVkIHJpZ2h0IHRoZXJlIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIG9mIGNvdXJzZSwgaXMgdG8gZ2V0IGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbSBnb2luZyB0byBzdGFydCBieSBjbG9zZWx5IGV4YW1pbmluZyBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB0aGVuIGJyb2FkZW4gbXkgdmlldyB0byB0aGUgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5LiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcywgYW5kIGFsc28gc2VlIHdoYXQga2V5IHN5bWJvbHMgYXJlIGF0IHBsYXkuIEJhc2ljYWxseSwgSSdtIHRyeWluZyB0byBlc3RhYmxpc2ggdGhlIHBhdGNoJ3MgY29udGV4dCB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLlxuXG5UbyBzcGVlZCB0aGluZ3MgdXAsIEknbGwgbGV2ZXJhZ2UgdGhlIHRvb2xzIEknbSB1c2VkIHRvOiBhIGdvb2QgZmlsZSByZWFkZXIgb3IgYGdyZXBgIGlzIGVzc2VudGlhbCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29kZSBzZWN0aW9ucyBhbmQgdW5kZXJzdGFuZCBob3cgdGhvc2Ugc3ltYm9scyBhbmQgZnVuY3Rpb25zIGFyZSByZWxhdGVkLiBNeSBnb2FsIGlzIHRvIHJhcGlkbHkgYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNoYW5nZSBhbmQgaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjM6MDcuNjIzNjgxNzI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDE4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc19yZWFkX2N5bGluZGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Vmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91ZnMvY3lsaW5kZXIuYy0yOC0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoyOTpzdGF0aWMgYm9vbCB1ZnNfcmVhZF9jeWxpbmRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL3Vmcy9jeWxpbmRlci5jLTMwLVxcdHVuc2lnbmVkIGNnbm8sIHVuc2lnbmVkIGJpdG1hcF9ucilcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTkxLVxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTtcXG5mcy91ZnMvY3lsaW5kZXIuYzo5MjpcXHR1ZnNfZXJyb3Ioc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIGVyciwgY2dubyk7XFxuZnMvdWZzL2N5bGluZGVyLmMtOTMtXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmM9MTQ0PXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMTc2LVxcdFxcdH0gZWxzZSB7XFxuZnMvdWZzL2N5bGluZGVyLmM6MTc3OlxcdFxcdFxcdGlmICh1bmxpa2VseSghdWZzX3JlYWRfY3lsaW5kZXIgKHNiLCBjZ25vLCBjZ25vKSkpIHtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzgtXFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0yMTMtXFx0XFx0c2JpLVxcdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xcbmZzL3Vmcy9jeWxpbmRlci5jOjIxNDpcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgMCkpKSB7XFxuZnMvdWZzL2N5bGluZGVyLmMtMjE1LVxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbi0tXFxuZnMvdWZzL3N1cGVyLmM9NDIwPXN0YXRpYyB2b2lkIHVmc19zZXR1cF9jc3RvdGFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy91ZnMvc3VwZXIuYy00NTMtICovXFxuZnMvdWZzL3N1cGVyLmM6NDU0OnN0YXRpYyBpbnQgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL3Vmcy9zdXBlci5jLTQ1NS17XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz03MTY9c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy91ZnMvc3VwZXIuYy0xMjE3LVxcdGlmICghc2JfcmRvbmx5KHNiKSlcXG5mcy91ZnMvc3VwZXIuYzoxMjE4OlxcdFxcdGlmICghdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzYikpXFxuZnMvdWZzL3N1cGVyLmMtMTIxOS1cXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTEyMzg9c3RhdGljIGludCB1ZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTI5My1cXHRcXHR9XFxuZnMvdWZzL3N1cGVyLmM6MTI5NDpcXHRcXHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKSB7XFxuZnMvdWZzL3N1cGVyLmMtMTI5NS1cXHRcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCBkdXJpbmcgcmVtb3VudGluZ1xcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjA3LjY2ODEwNDE4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgyNzQ5NzU2NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVUZTIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBhbmQgYnVpbGQgcHJvY2VzcyBmb3IgdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmaWxlczogSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBmcy91ZnMvS2NvbmZpZ2AgdG8gbG9vayBhdCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzcGVjaWZpYyB0byBVRlMuIFRoaXMgd2lsbCBzaG93IG1lIHdoYXQgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgaG93IHRoZXkncmUgZXhwb3NlZCB0byB0aGUgdXNlci4gQWZ0ZXIgdGhhdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRlMgbW9kdWxlIGdldHMgYnVpbHQsIHNvIHRoZSBgZnMvdWZzL01ha2VmaWxlYCBpcyB0aGUgbmV4dCB0YXJnZXQuIFRoYXQgZmlsZSB3aWxsIHJldmVhbCB0aGUgYnVpbGQgcnVsZXMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgY29tcGlsaW5nIHRoZSBVRlMgY29kZSBpbnRvIHRoZSBrZXJuZWwuIFRoZXNlIHR3byBmaWxlcyB0b2dldGhlciBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjE1Ljk0MzA4MTU4OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgVUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVUZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHJlYWQgb25seSlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgQlNEIGFuZCBkZXJpdmF0ZSB2ZXJzaW9ucyBvZiBVbml4IChzdWNoIGFzIFN1bk9TLCBGcmVlQlNELCBOZXRCU0QsXFxuICAgODpcXHRcXHQgIE9wZW5CU0QgYW5kIE5lWFRzdGVwKSB1c2UgYSBmaWxlIHN5c3RlbSBjYWxsZWQgVUZTLiBTb21lIFN5c3RlbSBWXFxuICAgOTpcXHRcXHQgIFVuaXhlcyBjYW4gY3JlYXRlIGFuZCBtb3VudCBoYXJkIGRpc2sgcGFydGl0aW9ucyBhbmQgZGlza2V0dGVzIHVzaW5nXFxuICAxMDpcXHRcXHQgIHRoaXMgZmlsZSBzeXN0ZW0gYXMgd2VsbC4gU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byByZWFkIGZyb21cXG4gIDExOlxcdFxcdCAgdGhlc2UgcGFydGl0aW9uczsgaWYgeW91IGFsc28gd2FudCB0byB3cml0ZSB0byB0aGVtLCBzYXkgWSB0byB0aGVcXG4gIDEyOlxcdFxcdCAgZXhwZXJpbWVudGFsIFxcXCJVRlMgZmlsZSBzeXN0ZW0gd3JpdGUgc3VwcG9ydFxcXCIsIGJlbG93LiBQbGVhc2UgcmVhZCB0aGVcXG4gIDEzOlxcdFxcdCAgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3Vmcy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHQgICAgICAgICAgVGhlIHJlY2VudGx5IHJlbGVhc2VkIFVGUzIgdmFyaWFudCAodXNlZCBpbiBGcmVlQlNEIDUueCkgaXNcXG4gIDE2OlxcdCAgICAgICAgICBSRUFELU9OTFkgc3VwcG9ydGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRcXHQgIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBnZW5lcmFsbHkgbm90IG5lZWRlZCBmb3IgZmxvcHBpZXMsIHNpbmNlIGFcXG4gIDE5OlxcdFxcdCAgZ29vZCBwb3J0YWJsZSB3YXkgdG8gdHJhbnNwb3J0IGZpbGVzIGFuZCBkaXJlY3RvcmllcyBiZXR3ZWVuIHVuaXhlc1xcbiAgMjA6XFx0XFx0ICAoYW5kIGV2ZW4gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpIGlzIGdpdmVuIGJ5IHRoZSB0YXIgcHJvZ3JhbSAoXFxcIm1hblxcbiAgMjE6XFx0XFx0ICB0YXJcXFwiIG9yIHByZWZlcmFibHkgXFxcImluZm8gdGFyXFxcIikuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgV2hlbiBhY2Nlc3NpbmcgTmVYVHN0ZXAgZmlsZXMsIHlvdSBtYXkgbmVlZCB0byBjb252ZXJ0IHRoZW0gZnJvbSB0aGVcXG4gIDI0OlxcdFxcdCAgTmVYVCBjaGFyYWN0ZXIgc2V0IHRvIHRoZSBMYXRpbjEgY2hhcmFjdGVyIHNldDsgdXNlIHRoZSBwcm9ncmFtXFxuICAyNTpcXHRcXHQgIHJlY29kZSAoXFxcImluZm8gcmVjb2RlXFxcIikgZm9yIHRoaXMgcHVycG9zZS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBUbyBjb21waWxlIHRoZSBVRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyODpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1ZnMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IGhhdmVuJ3QgaGVhcmQgYWJvdXQgYWxsIG9mIHRoaXMgYmVmb3JlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVRlNfRlNfV1JJVEVcXG4gIDMzOlxcdFxcdGJvb2wgXFxcIlVGUyBmaWxlIHN5c3RlbSB3cml0ZSBzdXBwb3J0IChEQU5HRVJPVVMpXFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBVRlNfRlNcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB0cnkgd3JpdGluZyB0byBVRlMgcGFydGl0aW9ucy4gVGhpcyBpc1xcbiAgMzc6XFx0XFx0ICBleHBlcmltZW50YWwsIHNvIHlvdSBzaG91bGQgYmFjayB1cCB5b3VyIFVGUyBwYXJ0aXRpb25zIGJlZm9yZWhhbmQuXFxuICAzODpcXHRcXG4gIDM5OlxcdGNvbmZpZyBVRlNfREVCVUdcXG4gIDQwOlxcdFxcdGJvb2wgXFxcIlVGUyBkZWJ1Z2dpbmdcXFwiXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIFVGU19GU1xcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgVUZTIGZpbGVzeXN0ZW0sIHNheVxcbiAgNDQ6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIF9tYW55XyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0byBiZVxcbiAgNDU6XFx0XFx0ICB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzoxNS45NDMxNDM3MzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODgwNjIyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkluaXRpYWwgRGlhZ25vc3RpYzogTWFrZWZpbGUgSW5zcGVjdGlvbioqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgYGZzL3Vmcy9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIFVGUyBmaWxlIHN5c3RlbSBtb2R1bGVzIHNob3VsZCByZXNpZGUuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSwgdGhpcyBpcyBsaWtlbHkgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2sgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGJ1aWxkIHByb2Nlc3Mgb2YgVUZTLiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21lIGlzc3VlLCBhbmQgdGhpcyBgTWFrZWZpbGVgIGhvbGRzIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbnN0YWxsZWQuIEnigJltIHRoaW5raW5nIEkgd2lsbCBuZWVkIHRvIGxvb2sgZm9yIGluY2x1ZGUgZGlyZWN0aXZlcywgY29tcGlsZXIgZmxhZ3MsIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpdGhpbiBpdC4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNvdXJjZXMgb2YgZXJyb3Igb3IgdmFyaWF0aW9uIGluIHRoZSBidWlsZCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjIyLjgyMzc2Nzk4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IHVmcyBmaWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfVUZTX0ZTKSArPSB1ZnMub1xcbiAgIDc6XFx0XFxuICAgODpcXHR1ZnMtb2JqcyA6PSBiYWxsb2MubyBjeWxpbmRlci5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIFxcXFxcXG4gICA5OlxcdFxcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXFxuICAxMDpcXHRjY2ZsYWdzLSQoQ09ORklHX1VGU19ERUJVRykgICAgKz0gLURERUJVR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyMzoyMi44MjM4MjcyNTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5ODYxMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYCBDYWxscyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYC4gTXkgZ29hbCBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkIHdpdGhpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFwIG91dCB0aGUgY2FsbCBncmFwaC4gQXJlIHRoZXkgYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIG9yIGFyZSB0aGV5IGJ1cmllZCBkZWVwZXIgd2l0aGluIGEgcGFydGljdWxhciBkcml2ZXIgbW9kdWxlPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgcHVycG9zZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3RvcmFnZSBhY2Nlc3MgcGF0aC4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb3BlcmF0aW9ucyB0cmlnZ2VyIHRoZXNlIGNhbGxzIOKAkyBpcyBpdCBkdXJpbmcgaW5vZGUgbG9hZGluZywgZGF0YSBibG9jayByZWFkcywgbWV0YWRhdGEgb3BlcmF0aW9ucywgb3IgcGVyaGFwcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjcm9zcy1yZWZlcmVuY2Ugb2YgdGhvc2UgZnVuY3Rpb24gbmFtZXMgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50cyBJJ20gbG9va2luZyBmb3IuIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNjEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjI1LjI2MzY5MDYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4NTMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfbG9hZF9jeWxpbmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2JhbGxvYy5jPTYyPXZvaWQgdWZzX2ZyZWVfZnJhZ21lbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBmcmFnbWVudCwgdW5zaWduZWQgY291bnQpXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmMtODctXFx0XFx0XFxuZnMvdWZzL2JhbGxvYy5jOjg4OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy04OS1cXHRpZiAoIXVjcGkpIFxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jPTE0NT12b2lkIHVmc19mcmVlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJhZ21lbnQsIHVuc2lnbmVkIGNvdW50KVxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jLTE4Mi1cXG5mcy91ZnMvYmFsbG9jLmM6MTgzOlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy0xODQtXFx0aWYgKCF1Y3BpKSBcXG4tLVxcbmZzL3Vmcy9iYWxsb2MuYz00OTc9c3RhdGljIHU2NCB1ZnNfYWRkX2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZnJhZ21lbnQsXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmMtNTE3LVxcdFxcdHJldHVybiAwO1xcbmZzL3Vmcy9iYWxsb2MuYzo1MTg6XFx0dWNwaSA9IHVmc19sb2FkX2N5bGluZGVyIChzYiwgY2dubyk7XFxuZnMvdWZzL2JhbGxvYy5jLTUxOS1cXHRpZiAoIXVjcGkpXFxuLS1cXG5mcy91ZnMvYmFsbG9jLmM9NTc2PXN0YXRpYyB1NjQgdWZzX2FsbG9jX2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBjZ25vLFxcbi0tXFxuZnMvdWZzL2JhbGxvYy5jLTYyMy1jZ19mb3VuZDpcXG5mcy91ZnMvYmFsbG9jLmM6NjI0OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnbm8pO1xcbmZzL3Vmcy9iYWxsb2MuYy02MjUtXFx0aWYgKCF1Y3BpKVxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmM9MTAwPXZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHVuc2lnbmVkIGJpdG1hcF9ucilcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTE0My0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoxNDQ6c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoXFxuZnMvdWZzL2N5bGluZGVyLmMtMTQ1LVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMTU1LVxcdGlmIChjZ25vIFxcdTAwM2U9IHVzcGktXFx1MDAzZXNfbmNnKSB7XFxuZnMvdWZzL2N5bGluZGVyLmM6MTU2OlxcdFxcdHVmc19wYW5pYyAoc2IsIFxcXCJ1ZnNfbG9hZF9jeWxpbmRlclxcXCIsIFxcXCJpbnRlcm5hbCBlcnJvciwgaGlnaCBudW1iZXIgb2YgY2dcXFwiKTtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNTctXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzEtXFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vW2Nnbm9dICE9IGNnbm8pIHtcXG5mcy91ZnMvY3lsaW5kZXIuYzoxNzI6XFx0XFx0XFx0XFx0dWZzX3BhbmljIChzYiwgXFxcInVmc19sb2FkX2N5bGluZGVyXFxcIiwgXFxcImludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcXFwiKTtcXG5mcy91ZnMvY3lsaW5kZXIuYy0xNzMtXFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuLS1cXG5mcy91ZnMvaWFsbG9jLmM9NTc9dm9pZCB1ZnNfZnJlZV9pbm9kZSAoc3RydWN0IGlub2RlICogaW5vZGUpXFxuLS1cXG5mcy91ZnMvaWFsbG9jLmMtODItXFx0Yml0ID0gdWZzX2lub3RvY2dvZmYgKGlubyk7XFxuZnMvdWZzL2lhbGxvYy5jOjgzOlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcXG5mcy91ZnMvaWFsbG9jLmMtODQtXFx0aWYgKCF1Y3BpKSB7XFxuLS1cXG5mcy91ZnMvaWFsbG9jLmM9MTcyPXN0cnVjdCBpbm9kZSAqdWZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvdWZzL2lhbGxvYy5jLTIzOC1jZ19mb3VuZDpcXG5mcy91ZnMvaWFsbG9jLmM6MjM5OlxcdHVjcGkgPSB1ZnNfbG9hZF9jeWxpbmRlciAoc2IsIGNnKTtcXG5mcy91ZnMvaWFsbG9jLmMtMjQwLVxcdGlmICghdWNwaSkge1xcbi0tXFxuZnMvdWZzL3Vmcy5oPTg4PXU2NCB1ZnNfbmV3X2ZyYWdtZW50cyhzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqLCB1NjQgZnJhZ21lbnQsIHU2NCBnb2FsLFxcbi0tXFxuZnMvdWZzL3Vmcy5oLTkxLS8qIGN5bGluZGVyLmMgKi9cXG5mcy91ZnMvdWZzLmg6OTI6ZXh0ZXJuIHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCk7XFxuZnMvdWZzL3Vmcy5oLTkzLWV4dGVybiB2b2lkIHVmc19wdXRfY3lsaW5kZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjIzOjI1LjMwOTg4MjUwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDg4MDE2NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFVGUyBDeWxpbmRlciBMb2FkaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IFVGUyBjeWxpbmRlciBkYXRhIGlzIGxvYWRlZC4gSSBzZWUgYHVmc19sb2FkX2N5bGluZGVyYCBpcyBkZWNsYXJlZCBhcyBub24tc3RhdGljLCBtZWFuaW5nIGl0J3MgdmlzaWJsZSBvdXRzaWRlIG9mIGl0cyBpbW1lZGlhdGUgZmlsZSB3aXRoaW4gdGhlIFVGUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgbGlrZWx5IHVzZWQgaW50ZXJuYWxseSBieSBvdGhlciBwYXJ0cyBvZiB0aGUgVUZTIGNvZGUuIFRoZW4sIGB1ZnNfcmVhZF9jeWxpbmRlcmAgaXMgc3RhdGljIHdpdGhpbiBgZnMvdWZzL2N5bGluZGVyLmNgLCBzbyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgbW9kdWxlIGFyZSBhIGdvb2QgaGludCBhcyB0byBlbmNhcHN1bGF0aW9uIG9mIGZ1bmN0aW9uYWxpdHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB1ZnNfbG9hZF9jeWxpbmRlcmAgZGVmaW5pdGlvbiBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI2LjE5MDA0ODYzOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy91ZnMvY3lsaW5kZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0ICogSWYgY3lsaW5kZXIgZ3JvdXAgaXMgbm90IGluIGNhY2hlLCB3ZSB3aWxsIGxvYWQgaXQgZnJvbSBkaXNrLlxcbiAxNDE6XFx0ICpcXG4gMTQyOlxcdCAqIFRoZSBjYWNoZSBpcyBtYW5hZ2VkIGJ5IExSVSBhbGdvcml0aG0uIFxcbiAxNDM6XFx0ICovXFxuIDE0NDpcXHRzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcXG4gMTQ1OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB1bnNpZ25lZCBjZ25vKVxcbiAxNDY6XFx0e1xcbiAxNDc6XFx0XFx0c3RydWN0IHVmc19zYl9pbmZvICogc2JpID0gVUZTX1NCKHNiKTtcXG4gMTQ4OlxcdFxcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcXG4gMTQ5OlxcdFxcdHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTtcXG4gMTUwOlxcdFxcdHVuc2lnbmVkIGNnLCBpLCBqO1xcbiAxNTE6XFx0XFxuIDE1MjpcXHRcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldVxcXFxuXFxcIiwgY2dubyk7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdHVzcGkgPSBzYmktXFx1MDAzZXNfdXNwaTtcXG4gMTU1OlxcdFxcdGlmIChjZ25vIFxcdTAwM2U9IHVzcGktXFx1MDAzZXNfbmNnKSB7XFxuIDE1NjpcXHRcXHRcXHR1ZnNfcGFuaWMgKHNiLCBcXFwidWZzX2xvYWRfY3lsaW5kZXJcXFwiLCBcXFwiaW50ZXJuYWwgZXJyb3IsIGhpZ2ggbnVtYmVyIG9mIGNnXFxcIik7XFxuIDE1NzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTU4OlxcdFxcdH1cXG4gMTU5OlxcdFxcdC8qXFxuIDE2MDpcXHRcXHQgKiBDeWxpbmRlciBncm91cCBudW1iZXIgY2cgaXQgaW4gY2FjaGUgYW5kIGl0IHdhcyBsYXN0IHVzZWRcXG4gMTYxOlxcdFxcdCAqL1xcbiAxNjI6XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vWzBdID09IGNnbm8pIHtcXG4gMTYzOlxcdFxcdFxcdFVGU0QoXFxcIkVYSVRcXFxcblxcXCIpO1xcbiAxNjQ6XFx0XFx0XFx0cmV0dXJuIHNiaS1cXHUwMDNlc191Y3BpWzBdO1xcbiAxNjU6XFx0XFx0fVxcbiAxNjY6XFx0XFx0LypcXG4gMTY3OlxcdFxcdCAqIE51bWJlciBvZiBjeWxpbmRlciBncm91cHMgaXMgbm90IGhpZ2hlciB0aGFuIFVGU19NQVhfR1JPVVBfTE9BREVEXFxuIDE2ODpcXHRcXHQgKi9cXG4gMTY5OlxcdFxcdGlmICh1c3BpLVxcdTAwM2VzX25jZyBcXHUwMDNjPSBVRlNfTUFYX0dST1VQX0xPQURFRCkge1xcbiAxNzA6XFx0XFx0XFx0aWYgKHNiaS1cXHUwMDNlc19jZ25vW2Nnbm9dICE9IFVGU19DR05PX0VNUFRZKSB7XFxuIDE3MTpcXHRcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2Nnbm9bY2dub10gIT0gY2dubykge1xcbiAxNzI6XFx0XFx0XFx0XFx0XFx0dWZzX3BhbmljIChzYiwgXFxcInVmc19sb2FkX2N5bGluZGVyXFxcIiwgXFxcImludGVybmFsIGVycm9yLCB3cm9uZyBudW1iZXIgb2YgY2cgaW4gY2FjaGVcXFwiKTtcXG4gMTczOlxcdFxcdFxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbiAxNzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE3NTpcXHRcXHRcXHRcXHR9XFxuIDE3NjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxNzc6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCF1ZnNfcmVhZF9jeWxpbmRlciAoc2IsIGNnbm8sIGNnbm8pKSkge1xcbiAxNzg6XFx0XFx0XFx0XFx0XFx0VUZTRChcXFwiRVhJVCAoRkFJTEVEKVxcXFxuXFxcIik7XFxuIDE3OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTgwOlxcdFxcdFxcdFxcdH1cXG4gMTgxOlxcdFxcdFxcdH1cXG4gMTgyOlxcdFxcdFxcdFVGU0QoXFxcIkVYSVRcXFxcblxcXCIpO1xcbiAxODM6XFx0XFx0XFx0cmV0dXJuIHNiaS1cXHUwMDNlc191Y3BpW2Nnbm9dO1xcbiAxODQ6XFx0XFx0fVxcbiAxODU6XFx0XFx0LypcXG4gMTg2OlxcdFxcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBpbiBjYWNoZSBidXQgaXQgd2FzIG5vdCBsYXN0IHVzZWQsIFxcbiAxODc6XFx0XFx0ICogd2Ugd2lsbCBtb3ZlIHRvIHRoZSBmaXJzdCBwb3NpdGlvblxcbiAxODg6XFx0XFx0ICovXFxuIDE4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2JpLVxcdTAwM2VzX2NnX2xvYWRlZCBcXHUwMDI2XFx1MDAyNiBzYmktXFx1MDAzZXNfY2dub1tpXSAhPSBjZ25vOyBpKyspO1xcbiAxOTA6XFx0XFx0aWYgKGkgXFx1MDAzYyBzYmktXFx1MDAzZXNfY2dfbG9hZGVkIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19jZ25vW2ldID09IGNnbm8pIHtcXG4gMTkxOlxcdFxcdFxcdGNnID0gc2JpLVxcdTAwM2VzX2Nnbm9baV07XFxuIDE5MjpcXHRcXHRcXHR1Y3BpID0gc2JpLVxcdTAwM2VzX3VjcGlbaV07XFxuIDE5MzpcXHRcXHRcXHRmb3IgKGogPSBpOyBqIFxcdTAwM2UgMDsgai0tKSB7XFxuIDE5NDpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tqXSA9IHNiaS1cXHUwMDNlc19jZ25vW2otMV07XFxuIDE5NTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cXHUwMDNlc191Y3BpW2otMV07XFxuIDE5NjpcXHRcXHRcXHR9XFxuIDE5NzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1swXSA9IGNnO1xcbiAxOTg6XFx0XFx0XFx0c2JpLVxcdTAwM2VzX3VjcGlbMF0gPSB1Y3BpO1xcbiAxOTk6XFx0XFx0LypcXG4gMjAwOlxcdFxcdCAqIEN5bGluZGVyIGdyb3VwIG51bWJlciBjZyBpcyBub3QgaW4gY2FjaGUsIHdlIHdpbGwgcmVhZCBpdCBmcm9tIGRpc2tcXG4gMjAxOlxcdFxcdCAqIGFuZCBwdXQgaXQgdG8gdGhlIGZpcnN0IHBvc2l0aW9uXFxuIDIwMjpcXHRcXHQgKi9cXG4gMjAzOlxcdFxcdH0gZWxzZSB7XFxuIDIwNDpcXHRcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2NnX2xvYWRlZCBcXHUwMDNjIFVGU19NQVhfR1JPVVBfTE9BREVEKVxcbiAyMDU6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX2NnX2xvYWRlZCsrO1xcbiAyMDY6XFx0XFx0XFx0ZWxzZVxcbiAyMDc6XFx0XFx0XFx0XFx0dWZzX3B1dF9jeWxpbmRlciAoc2IsIFVGU19NQVhfR1JPVVBfTE9BREVELTEpO1xcbiAyMDg6XFx0XFx0XFx0dWNwaSA9IHNiaS1cXHUwMDNlc191Y3BpW3NiaS1cXHUwMDNlc19jZ19sb2FkZWQgLSAxXTtcXG4gMjA5OlxcdFxcdFxcdGZvciAoaiA9IHNiaS1cXHUwMDNlc19jZ19sb2FkZWQgLSAxOyBqIFxcdTAwM2UgMDsgai0tKSB7XFxuIDIxMDpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tqXSA9IHNiaS1cXHUwMDNlc19jZ25vW2otMV07XFxuIDIxMTpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVtqXSA9IHNiaS1cXHUwMDNlc191Y3BpW2otMV07XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHRcXHRzYmktXFx1MDAzZXNfdWNwaVswXSA9IHVjcGk7XFxuIDIxNDpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgMCkpKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRVRlNEKFxcXCJFWElUIChGQUlMRUQpXFxcXG5cXFwiKTtcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMTc6XFx0XFx0XFx0fVxcbiAyMTg6XFx0XFx0fVxcbiAyMTk6XFx0XFx0VUZTRChcXFwiRVhJVFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI2LjE5MDEyNDAzOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc5MTMzNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgKipcblxuT2theSwgSSdtIGFscmVhZHkgbG9va2luZyBhdCB0aGUgYGZzL3Vmcy9zdXBlci5jYCBmaWxlLCBhbmQgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3VwZXJibG9jayBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AgZnVuY3Rpb24gYmV0dGVyLiBJdCdzIG9idmlvdXNseSBpbnZvbHZlZCBpbiB0aGUgVUZTIGZpbGUgc3lzdGVtIHN0cnVjdHVyZSwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgdGhlIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMgYXJlIGxvYWRlZCBmcm9tIGRpc2suIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGNhbGxzIHRoaXMgdGhpbmcuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHB1dCBpdCBpbiBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSB2YXJpb3VzIHBvaW50cyB0aGF0IGl0J3MgY3J1Y2lhbCB3aXRoaW4gdGhlIHdpZGVyIFVGUyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gU28sIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGVuIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBMZXQncyBzdGFydCBieSBmaW5kaW5nIGFsbCB0aGUgY2FsbHMgdG8gYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIHdpdGhpbiB0aGUgcHJvamVjdC4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjQ6MjkuMjY5MjYwNDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHRcXG4gNDUxOlxcdC8qXFxuIDQ1MjpcXHQgKiBSZWFkIG9uLWRpc2sgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggY3lsaW5kZXIgZ3JvdXBzXFxuIDQ1MzpcXHQgKi9cXG4gNDU0OlxcdHN0YXRpYyBpbnQgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiA0NTU6XFx0e1xcbiA0NTY6XFx0XFx0c3RydWN0IHVmc19zYl9pbmZvICpzYmkgPSBVRlNfU0Ioc2IpO1xcbiA0NTc6XFx0XFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKnVzcGkgPSBzYmktXFx1MDAzZXNfdXNwaTtcXG4gNDU4OlxcdFxcdHVuc2lnbmVkIGNoYXIgKiBiYXNlLCAqIHNwYWNlO1xcbiA0NTk6XFx0XFx0dW5zaWduZWQgc2l6ZSwgYmxrcywgaTtcXG4gNDYwOlxcdFxcbiA0NjE6XFx0XFx0VUZTRChcXFwiRU5URVJcXFxcblxcXCIpO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHQvKlxcbiA0NjQ6XFx0XFx0ICogUmVhZCBjcyBzdHJ1Y3R1cmVzIGZyb20gKHVzdWFsbHkpIGZpcnN0IGRhdGEgYmxvY2tcXG4gNDY1OlxcdFxcdCAqIG9uIHRoZSBkZXZpY2UuIFxcbiA0NjY6XFx0XFx0ICovXFxuIDQ2NzpcXHRcXHRzaXplID0gdXNwaS1cXHUwMDNlc19jc3NpemU7XFxuIDQ2ODpcXHRcXHRibGtzID0gKHNpemUgKyB1c3BpLVxcdTAwM2VzX2ZzaXplIC0gMSkgXFx1MDAzZVxcdTAwM2UgdXNwaS1cXHUwMDNlc19mc2hpZnQ7XFxuIDQ2OTpcXHRcXHRiYXNlID0gc3BhY2UgPSBrbWFsbG9jKHNpemUsIEdGUF9OT0ZTKTtcXG4gNDcwOlxcdFxcdGlmICghYmFzZSlcXG4gNDcxOlxcdFxcdFxcdGdvdG8gZmFpbGVkOyBcXG4gNDcyOlxcdFxcdHNiaS1cXHUwMDNlc19jc3AgPSAoc3RydWN0IHVmc19jc3VtICopc3BhY2U7XFxuIDQ3MzpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYmxrczsgaSsrKSB7XFxuIDQ3NDpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JfYnJlYWQoc2IsIHVzcGktXFx1MDAzZXNfY3NhZGRyICsgaSk7XFxuIDQ3NTpcXHRcXHRcXHRpZiAoIWJoKVxcbiA0NzY6XFx0XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDQ3NzpcXHRcXHRcXHRtZW1jcHkoc3BhY2UsIGJoLVxcdTAwM2ViX2RhdGEsIHVzcGktXFx1MDAzZXNfZnNpemUpO1xcbiA0Nzg6XFx0XFx0XFx0c3BhY2UgKz0gdXNwaS1cXHUwMDNlc19mc2l6ZTtcXG4gNDc5OlxcdFxcdFxcdGJyZWxzZSAoYmgpO1xcbiA0ODA6XFx0XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHQvKlxcbiA0ODM6XFx0XFx0ICogUmVhZCBjeWxpbmRlciBncm91cCAod2UgcmVhZCBvbmx5IGZpcnN0IGZyYWdtZW50IGZyb20gYmxvY2tcXG4gNDg0OlxcdFxcdCAqIGF0IHRoaXMgdGltZSkgYW5kIHByZXBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBjZyBjYWNoaW5nLlxcbiA0ODU6XFx0XFx0ICovXFxuIDQ4NjpcXHRcXHRzYmktXFx1MDAzZXNfdWNnID0ga21hbGxvY19vYmpzKHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1c3BpLVxcdTAwM2VzX25jZywgR0ZQX05PRlMpO1xcbiA0ODc6XFx0XFx0aWYgKCFzYmktXFx1MDAzZXNfdWNnKVxcbiA0ODg6XFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuIDQ4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdXNwaS1cXHUwMDNlc19uY2c7IGkrKykgXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjI0OjI5LjI2OTM2NTc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NjYxMTkwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHVmc19yZWFkX2N5bGluZGVyYCBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHVmc19yZWFkX2N5bGluZGVyYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gcG9wcyB1cCB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBjeWxpbmRlciBncm91cHMsIHNwZWNpZmljYWxseSBkdXJpbmcgbG9hZGluZy4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gYmxvY2sgYW5kIGZyYWdtZW50IGFsbG9jYXRpb24sIGFuZCBhbHNvIGRlYWxsb2NhdGlvbiBvciBmcmVlIG9wZXJhdGlvbnMuIEl0J3MgYWxzbyB1dGlsaXplZCB3aGVuIHdlJ3JlIHJlYWRpbmcgYW5kIHdyaXRpbmcgZGF0YSB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGl0c2VsZi4gSG1tLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIHNvdW5kcyByaWdodC4gSnVzdCB0byBtYWtlIHN1cmUsIEkgd2FudCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCB0aGUgYGZzL3Vmcy9zdXBlci5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmc190eXBlYCBkZWZpbml0aW9ucyBhbmQgd2hhdCBtb3VudCBjYWxsYmFja3MgdGhhdCBmaWxlIGltcGxlbWVudHMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBzb2xpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk2MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjU6MTUuOTMwNTU5MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjY2MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVmc19mc190eXBlfHVmc19maWxsX3N1cGVyfHVmc19pbml0X2ZzX2NvbnRleHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Vmcy9zdXBlci5jPTY5OT1zdGF0aWMgdTY0IHVmc19tYXhfYnl0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTcxNS1cXG5mcy91ZnMvc3VwZXIuYzo3MTY6c3RhdGljIGludCB1ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdWZzL3N1cGVyLmMtNzE3LXtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0MTk9c3RhdGljIGludCB1ZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL3Vmcy9zdXBlci5jLTE0MjAte1xcbmZzL3Vmcy9zdXBlci5jOjE0MjE6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIHVmc19maWxsX3N1cGVyKTtcXG5mcy91ZnMvc3VwZXIuYy0xNDIyLX1cXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgdWZzX2NvbnRleHRfb3BzID0ge1xcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTQzNS1cXG5mcy91ZnMvc3VwZXIuYzoxNDM2OnN0YXRpYyBpbnQgdWZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvdWZzL3N1cGVyLmMtMTQzNy17XFxuLS1cXG5mcy91ZnMvc3VwZXIuYy0xNDYwLVxcbmZzL3Vmcy9zdXBlci5jOjE0NjE6c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVmc19mc190eXBlID0ge1xcbmZzL3Vmcy9zdXBlci5jLTE0NjItXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTE0NjQtXFx0LmtpbGxfc2JcXHQ9IGtpbGxfYmxvY2tfc3VwZXIsXFxuZnMvdWZzL3N1cGVyLmM6MTQ2NTpcXHQuaW5pdF9mc19jb250ZXh0ID0gdWZzX2luaXRfZnNfY29udGV4dCxcXG5mcy91ZnMvc3VwZXIuYy0xNDY2LVxcdC5wYXJhbWV0ZXJzXFx0PSB1ZnNfcGFyYW1fc3BlYyxcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0NzE9c3RhdGljIGludCBfX2luaXQgaW5pdF91ZnNfZnModm9pZClcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTE0NzUtXFx0XFx0Z290byBvdXQxO1xcbmZzL3Vmcy9zdXBlci5jOjE0NzY6XFx0ZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2dWZzX2ZzX3R5cGUpO1xcbmZzL3Vmcy9zdXBlci5jLTE0NzctXFx0aWYgKGVycilcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTE0ODY9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfdWZzX2ZzKHZvaWQpXFxuZnMvdWZzL3N1cGVyLmMtMTQ4Ny17XFxuZnMvdWZzL3N1cGVyLmM6MTQ4ODpcXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNnVmc19mc190eXBlKTtcXG5mcy91ZnMvc3VwZXIuYy0xNDg5LVxcdGRlc3Ryb3lfaW5vZGVjYWNoZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNToxNS45NzYyMzIyNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMzMTg1ODY0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVUZTIFZ1bG5lcmFiaWxpdHk6IEEgRnV6emluZyBPcHBvcnR1bml0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgaW4gYGZzL3Vmcy9jeWxpbmRlci5jYCwgc3BlY2lmaWNhbGx5IGB1ZnNfcmVhZF9jeWxpbmRlcigpYCwgaXMgdmFsaWRhdGluZyB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSByZWFkIGZyb20gZGlzaywgZm9jdXNpbmcgb24gdGhlIGZyZWUgYml0bWFwJ3MgaW50ZWdyaXR5LiBJdCdzIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGZyZWUgYml0bWFwIGRvbid0IGV4Y2VlZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiBJZiB0aGV5IGRvLCBpdCdzIGEgY3JpdGljYWwgZXJyb3IsIHByZXZlbnRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIHdoZW4gdGhlIGZyZWUgYml0bWFwIGlzIG1hbmlwdWxhdGVkLiBQcmV0dHkgc3RhbmRhcmQgZmlsZXN5c3RlbSBlcnJvciBoYW5kbGluZywgcmVhbGx5LlxuXG5JcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5ISBGaWxlc3lzdGVtIGZ1enppbmcgaXMgYSBnb2xkIHN0YW5kYXJkIHRhcmdldCBmb3IgdG9vbHMgbGlrZSBzeXprYWxsZXIgYW5kIHN5ei1jbHVzdGVyLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vdW50aW5nIGNvcnJ1cHRlZCBkaXNrIGltYWdlcyBhbmQgcG9raW5nIGF0IHRoZSBmaWxlc3lzdGVtIGNvcmUg4oCTIGJsb2NrIGFsbG9jYXRpb24sIGZpbGUgY3JlYXRpb24sIGRlbGV0aW9uLCBldGMuIOKAkyB3aGljaCBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMuIEFuZCB0aGlzIHBhdGNoIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBVRlMgbG9naWMuXG5cbk5vdywgd2hlcmUgY2FuIHdlIGV2ZW4gaGl0IHRoaXMgY29kZT8gVUZTIGlzIGEgY29yZSBmaWxlc3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwgKGBDT05GSUdfVUZTX0ZTYCksIHNvIHRoYXQncyBnb29kLiBJdCBjYW4gYmUgbW91bnRlZCBvbiBsb29wIGRldmljZXMgb3IgcmFtZGlza3Mgd2l0aGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGljaCBnaXZlcyB1cyBwbGVudHkgb2YgZmxleGliaWxpdHkuIFdlIG5lZWQgYENPTkZJR19VRlNfRlNgLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGBDT05GSUdfVUZTX0ZTX1dSSVRFYD8gRG9lcyByZWFkLXdyaXRlIGFjY2VzcyBpbnRyb2R1Y2UgbW9yZSBhdHRhY2sgc3VyZmFjZT8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIHdoZXRoZXIgYHVmc19sb2FkX2N5bGluZGVyYCBnZXRzIGNhbGxlZCBkdXJpbmcgcmVhZC1vbmx5ICphbmQqIHJlYWQtd3JpdGUgb3BlcmF0aW9ucy5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgYml0IGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBzaG91bGQgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY2FsbHMgYHVmc19sb2FkX2N5bGluZGVyYCBhbmQgYHVmc19yZWFkX2N5bGluZGVyYC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNhbGxlcnMsIGluIGBiYWxsb2MuY2AsIGl0J3MgYmVpbmcgdXNlZCBpbiBgdWZzX2ZyZWVfZnJhZ21lbnRzYCwgYHVmc19mcmVlX2Jsb2Nrc2AsIGB1ZnNfYWRkX2ZyYWdtZW50c2AsIGFuZCBgdWZzX2FsbG9jX2ZyYWdtZW50c2AuIFRoZW4gaW4gYGlhbGxvYy5jYCwgYHVmc19mcmVlX2lub2RlYCwgYW5kIGB1ZnNfbmV3X2lub2RlYC4gQW5kIGZpbmFsbHksIGluIGBzdXBlci5jYCwgd2UgaGF2ZSBgdWZzX3JlYWRfY3lsaW5kZXJfc3RydWN0dXJlc2AuIEhtbSwgZG9lcyAqdGhhdCogY2FsbCBgdWZzX2xvYWRfY3lsaW5kZXJgPyBOZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBzdXBlci5jYCBwYXRoLiBTbyBtYW55IHRoaW5ncyB0b3VjaGluZyB0aGlzIGNvZGUuIEkgbmVlZCB0byBrbm93IHRoZSBjYWxsaW5nIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjY6MTkuMjk0ODI3MzA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjEzOTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZnNfcmVhZF9jeWxpbmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2N5bGluZGVyLmMtMjgtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy05MS1cXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuZnMvdWZzL2N5bGluZGVyLmM6OTI6XFx0dWZzX2Vycm9yKHNiLCBcXFwidWZzX3JlYWRfY3lsaW5kZXJcXFwiLCBlcnIsIGNnbm8pO1xcbmZzL3Vmcy9jeWxpbmRlci5jLTkzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jPTE0ND1zdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVmc19sb2FkX2N5bGluZGVyIChcXG4tLVxcbmZzL3Vmcy9jeWxpbmRlci5jLTE3Ni1cXHRcXHR9IGVsc2Uge1xcbmZzL3Vmcy9jeWxpbmRlci5jOjE3NzpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXVmc19yZWFkX2N5bGluZGVyIChzYiwgY2dubywgY2dubykpKSB7XFxuZnMvdWZzL2N5bGluZGVyLmMtMTc4LVxcdFxcdFxcdFxcdFVGU0QoXFxcIkVYSVQgKEZBSUxFRClcXFxcblxcXCIpO1xcbi0tXFxuZnMvdWZzL2N5bGluZGVyLmMtMjEzLVxcdFxcdHNiaS1cXHUwMDNlc191Y3BpWzBdID0gdWNwaTtcXG5mcy91ZnMvY3lsaW5kZXIuYzoyMTQ6XFx0XFx0aWYgKHVubGlrZWx5KCF1ZnNfcmVhZF9jeWxpbmRlciAoc2IsIGNnbm8sIDApKSkge1xcbmZzL3Vmcy9jeWxpbmRlci5jLTIxNS1cXHRcXHRcXHRVRlNEKFxcXCJFWElUIChGQUlMRUQpXFxcXG5cXFwiKTtcXG4tLVxcbmZzL3Vmcy9zdXBlci5jPTQyMD1zdGF0aWMgdm9pZCB1ZnNfc2V0dXBfY3N0b3RhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNDUzLSAqL1xcbmZzL3Vmcy9zdXBlci5jOjQ1NDpzdGF0aWMgaW50IHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy91ZnMvc3VwZXIuYy00NTUte1xcbi0tXFxuZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtMTIxNy1cXHRpZiAoIXNiX3Jkb25seShzYikpXFxuZnMvdWZzL3N1cGVyLmM6MTIxODpcXHRcXHRpZiAoIXVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXMoc2IpKVxcbmZzL3Vmcy9zdXBlci5jLTEyMTktXFx0XFx0XFx0Z290byBmYWlsZWQ7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyOTMtXFx0XFx0fVxcbmZzL3Vmcy9zdXBlci5jOjEyOTQ6XFx0XFx0aWYgKCF1ZnNfcmVhZF9jeWxpbmRlcl9zdHJ1Y3R1cmVzKHNiKSkge1xcbmZzL3Vmcy9zdXBlci5jLTEyOTUtXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgZHVyaW5nIHJlbW91bnRpbmdcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNjoxOS4zNDY5NzM3NDVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI4ODMxNDE0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFVGUyBXcml0ZSBDYXBhYmlsaXR5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aGUgYENPTkZJR19VRlNfRlNfV1JJVEVgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIHdyaXRlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBVRlMgZmlsZXN5c3RlbS4gTXkgZmlyc3Qgc3RlcCBpcyB0byBjb25maXJtIHRoZSBvYnZpb3VzLCBkb2VzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gYWxsb3cgbWUgdG8gd3JpdGUgdG8gVUZTLiBTZWNvbmRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMsIHNvIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIHRoZSBgZnMvdWZzYCBkaXJlY3RvcnkuIFRoYXQgd2lsbCB0ZWxsIG1lIHByZWNpc2VseSB3aGljaCBwYXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSBjb2RlIGFyZSBjb25kaXRpb25hbGl6ZWQgYmFzZWQgb24gdGhpcyBmbGFnLCB3aGljaCwgb2YgY291cnNlLCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGltcGFjdC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBzZXQsIG90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGdvaW5nIHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTgzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MjY6NTIuMjMwMTIwNzg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMTE1MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1VGU19GU19XUklURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91ZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL3N1cGVyLmM9NzE2PXN0YXRpYyBpbnQgdWZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvdWZzL3N1cGVyLmMtNzM4LVxcbmZzL3Vmcy9zdXBlci5jOjczOTojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy03NDAtXFx0aWYgKCFzYl9yZG9ubHkoc2IpKSB7XFxuLS1cXG5mcy91ZnMvc3VwZXIuYz0xMjM4PXN0YXRpYyBpbnQgdWZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEyNzktXFx0ICovXFxuZnMvdWZzL3N1cGVyLmM6MTI4MDojaWZuZGVmIENPTkZJR19VRlNfRlNfV1JJVEVcXG5mcy91ZnMvc3VwZXIuYy0xMjgxLVxcdFxcdHByX2VycihcXFwidWZzIHdhcyBjb21waWxlZCB3aXRoIHJlYWQtb25seSBzdXBwb3J0LCBjYW4ndCBiZSBtb3VudGVkIGFzIHJlYWQtd3JpdGVcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzoyNjo1Mi4zNDgyMzgwMjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgxODYzMjIzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFVGUyBXcml0ZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gaWYgYENPTkZJR19VRlNfRlNfV1JJVEVgIGlzbid0IGVuYWJsZWQsIFVGUyBpcyBzdHVjayBpbiByZWFkLW9ubHkgbW9kZS4gVGhhdCBtYWtlcyBzZW5zZS4gV2hlbiB3ZSdyZSBtb3VudGluZyByZWFkLXdyaXRlLCBgdWZzX2ZpbGxfc3VwZXJgIGtpY2tzIG9mZiB0aGUgcHJvY2VzcyBhbmQgY2FsbHMgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgLCBhbmQgdGhpbmdzIGxpa2UgYWxsb2NhdGluZyBvciBmcmVlaW5nIGRhdGEgd2lsbCB0aGVuIHVzZSBgdWZzX2xvYWRfY3lsaW5kZXJgLCB3aGljaCBjYWxscyBgdWZzX3JlYWRfY3lsaW5kZXJgLiBSaWdodCwgc28gYm90aCBgQ09ORklHX1VGU19GU2AgYW5kIGBDT05GSUdfVUZTX0ZTX1dSSVRFYCBhcmUga2V5IGZvciB0ZXN0aW5nIFVGUyB3cml0ZSBhbmQgdGhlc2UgY3lsaW5kZXIgb3BlcmF0aW9ucy5cblxuTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIHNldCBjb3JyZWN0bHkuIExvb2tpbmcgYXQgYGZzL3Vmcy9LY29uZmlnYCwgSSBzZWU6XG5cbmBjb25maWcgVUZTX0ZTYCBkZXBlbmRzIG9uIGBCTE9DS2AgYW5kIHNlbGVjdHMgYEJVRkZFUl9IRUFEYC5cbmBjb25maWcgVUZTX0ZTX1dSSVRFYCBkZXBlbmRzIG9uIGBVRlNfRlNgLlxuXG5gQkxPQ0tgIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZywgc28gdGhhdCBzaG91bGRuJ3QgYmUgYW4gaXNzdWUuIFNvLCB0aGUga2V5IGNvbmZpZ3MgdG8gZW5hYmxlIGFyZSBgVUZTX0ZTYCBhbmQgYFVGU19GU19XUklURWAuIEdvb2QuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIHN5bWJvbHMuIGB1ZnNfbG9hZF9jeWxpbmRlcmAgaXMgdGhlIGV4cG9ydGVkLCBub24tc3RhdGljIGZ1bmN0aW9uIGluIGBmcy91ZnMvY3lsaW5kZXIuY2AgdGhhdCB1bHRpbWF0ZWx5IGNhbGxzIGB1ZnNfcmVhZF9jeWxpbmRlcmAuIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBvciByZWxhdGVkIG9uZXMuIExldCdzIHN0YXJ0IGJ5IGNhcmVmdWxseSBleGFtaW5pbmcgYGZzL3Vmcy9jeWxpbmRlci5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6Mjk6NTQuMjExNDY1MzY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjQ5MDQ1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXS4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvdWZzL2N5bGluZGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvdWZzL2N5bGluZGVyLmMtMjgtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6Mjk6c3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy91ZnMvY3lsaW5kZXIuYy0zMC1cXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy05OS0gKi9cXG5mcy91ZnMvY3lsaW5kZXIuYzoxMDA6dm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgYml0bWFwX25yKVxcbmZzL3Vmcy9jeWxpbmRlci5jLTEwMS17XFxuLS1cXG5mcy91ZnMvY3lsaW5kZXIuYy0xNDMtICovXFxuZnMvdWZzL2N5bGluZGVyLmM6MTQ0OnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWZzX2xvYWRfY3lsaW5kZXIgKFxcbmZzL3Vmcy9jeWxpbmRlci5jLTE0NS1cXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdW5zaWduZWQgY2dubylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6Mjk6NTQuNTM2Mzc0MjQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMTkwNTcyNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVRlMgQ3lsaW5kZXIgR3JvdXAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGB1ZnNfbG9hZF9jeWxpbmRlcmAgYW5kIGB1ZnNfcHV0X2N5bGluZGVyYCByZXNpZGUgd2l0aGluIGBjeWxpbmRlci5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBwYXRjaCBtb2RpZnlpbmcgdmFsaWRhdGlvbiBsb2dpYyB3aXRoaW4gYHVmc19yZWFkX2N5bGluZGVyYCwgd2hpY2ggYHVmc19sb2FkX2N5bGluZGVyYCBkaXJlY3RseSBjYWxscywgdGhhdCBkZWZpbml0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGZvY3VzIG9uLlxuXG5UbyBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgSSdtIGNoZWNraW5nIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoZSBgZnMvdWZzL2AgZGlyZWN0b3J5IHRoYXQgZGVhbCB3aXRoIGN5bGluZGVyIGdyb3Vwczogc3BlY2lmaWNhbGx5IGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19hbGxvY19mcmFnbWVudHNgLCBgdWZzX25ld19mcmFnbWVudHNgLCBgdWZzX25ld19pbm9kZWAsIGFuZCBgdWZzX2ZyZWVfaW5vZGVgLiBJIGhhZCB0byBjb25maXJtIHRoYXQgYHVmc19yZWFkX2N5bGluZGVyX3N0cnVjdHVyZXNgIGluIGBzdXBlci5jYCBpcyBzdGF0aWMgKGl0IGlzISkgYW5kIHRoZSBzYW1lIGZvciBgdWZzX2ZpbGxfc3VwZXJgLiBTbyB0aGF0IHJ1bGVzIHRob3NlIG91dCBvZiBteSBjb3JlIGludGVyZXN0LlxuXG5UaGVyZWZvcmUsIGB1ZnNfbG9hZF9jeWxpbmRlcmAsIGB1ZnNfZnJlZV9mcmFnbWVudHNgLCBgdWZzX2ZyZWVfYmxvY2tzYCwgYHVmc19uZXdfaW5vZGVgLCBhbmQgYHVmc19mcmVlX2lub2RlYCBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cyBmb3IgZGVlcGVyIGFuYWx5c2lzLiBCZWNhdXNlIGB1ZnNfbG9hZF9jeWxpbmRlcmAgKmRpcmVjdGx5KiBjYWxscyB0aGUgbW9kaWZpZWQgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgaXQncyB0aGUgbW9zdCBkaXJlY3Qgbm9uLXN0YXRpYyBzeW1ib2wgb2YgaW50ZXJlc3QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSByZWxldmFudCBkZXRhaWxzOiB0aGUgZnV6emluZyBpcyBjb25zaWRlcmVkIHdvcnRod2hpbGUgKGBXb3J0aEZ1enppbmc6IHRydWVgKSBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCAoYFVGU19GU2AsIGBVRlNfRlNfV1JJVEVgKS4gVGhlIGluaXRpYWwgZm9jdXMgc3ltYm9sIGxpc3QgY291bGQgYmUgYWxsIG9mIHRob3NlIG1lbnRpb25lZCwgb3IgSSBjYW4gZm9jdXMgb24gYHVmc19sb2FkX2N5bGluZGVyYCBhbG9uZSB0byBuYXJyb3cgdGhpbmdzLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTM5LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzozMDoxNS43MjY5NDk5OTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwODE5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVGU19GU1wiLFxuICAgIFwiVUZTX0ZTX1dSSVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWZzX2xvYWRfY3lsaW5kZXJcIixcbiAgICBcInVmc19uZXdfaW5vZGVcIixcbiAgICBcInVmc19mcmVlX2lub2RlXCIsXG4gICAgXCJ1ZnNfZnJlZV9mcmFnbWVudHNcIixcbiAgICBcInVmc19mcmVlX2Jsb2Nrc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHVmc19yZWFkX2N5bGluZGVyKCkgaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGRyaXZlciB0byB2YWxpZGF0ZSB0aGF0IGN5bGluZGVyIGdyb3VwIGZyZWUgYml0bWFwcyBmaXQgd2l0aGluIHRoZSBsb2FkZWQgY3lsaW5kZXIgZ3JvdXAgYnVmZmVyLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW91bnRpbmcgYW5kIG1vZGlmeWluZyBjb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZXMuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzIGFuZCBpcyB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVUZTX0ZTXCIsXG4gICAgXCJVRlNfRlNfV1JJVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZnNfbG9hZF9jeWxpbmRlclwiLFxuICAgIFwidWZzX25ld19pbm9kZVwiLFxuICAgIFwidWZzX2ZyZWVfaW5vZGVcIixcbiAgICBcInVmc19mcmVlX2ZyYWdtZW50c1wiLFxuICAgIFwidWZzX2ZyZWVfYmxvY2tzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gdWZzX3JlYWRfY3lsaW5kZXIoKSBpbiB0aGUgVUZTIGZpbGVzeXN0ZW0gZHJpdmVyIHRvIHZhbGlkYXRlIHRoYXQgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXBzIGZpdCB3aXRoaW4gdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb3VudGluZyBhbmQgbW9kaWZ5aW5nIGNvcnJ1cHRlZCBmaWxlc3lzdGVtIGltYWdlcy4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBsb29wIGRldmljZXMgb3IgZGlzayBpbWFnZXMgYW5kIGlzIHdlbGwgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MTUuODQ4MDM5NzU2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDk4NzAyNDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjMwOjE1Ljg0ODUwNDUyNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMwOTg2NTU2NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ2YWM4NGI0MWMzZmJkNzQzNDlkY2UwYjAwOGMzM2YwM2RjZTJlNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDA3OjIzOjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvdWZzL2N5bGluZGVyLmMgYi9mcy91ZnMvY3lsaW5kZXIuY1xuaW5kZXggYTI4MTMyNzBjMzAzZS4uZmVjNmM5ZGZiMDU1ZCAxMDA2NDRcbi0tLSBhL2ZzL3Vmcy9jeWxpbmRlci5jXG4rKysgYi9mcy91ZnMvY3lsaW5kZXIuY1xuQEAgLTMzLDYgKzMzLDggQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogdXNwaTtcbiBcdHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogdWNwaTtcbiBcdHN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgKiB1Y2c7XG4rXHR1NjQgY2dfYnl0ZXMsIGZyZWVfYml0bWFwX2J5dGVzO1xuK1x0Y29uc3QgY2hhciAqZXJyO1xuIFx0dW5zaWduZWQgaSwgajtcbiBcbiBcdFVGU0QoXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxuXCIsIGNnbm8sIGJpdG1hcF9ucik7XG5AQCAtNDgsOCArNTAsMTAgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFVDUElfVUJIKHVjcGkpLVx1MDAzZWJoWzBdID0gc2JpLVx1MDAzZXNfdWNnW2Nnbm9dO1xuIFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgVUNQSV9VQkgodWNwaSktXHUwMDNlY291bnQ7IGkrKykge1xuIFx0XHRVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cdTAwM2VmcmFnbWVudCArIGkpO1xuLVx0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKVxuK1x0XHRpZiAoIVVDUElfVUJIKHVjcGkpLVx1MDAzZWJoW2ldKSB7XG4rXHRcdFx0ZXJyID0gXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCI7XG4gXHRcdFx0Z290byBmYWlsZWQ7XG4rXHRcdH1cbiBcdH1cbiBcdHNiaS1cdTAwM2VzX2Nnbm9bYml0bWFwX25yXSA9IGNnbm87XG4gXHRcdFx0XG5AQCAtNjgsNiArNzIsMTYgQEAgc3RhdGljIGJvb2wgdWZzX3JlYWRfY3lsaW5kZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdHVjcGktXHUwMDNlY19jbHVzdGVyc3Vtb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xuIFx0dWNwaS1cdTAwM2VjX2NsdXN0ZXJvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVx1MDAzZWNnX3UuY2dfNDQuY2dfY2x1c3Rlcm9mZik7XG4gXHR1Y3BpLVx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cdTAwM2VjZ191LmNnXzQ0LmNnX25jbHVzdGVyYmxrcyk7XG4rXG4rXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVx1MDAzZWNvdW50ICogc2ItXHUwMDNlc19ibG9ja3NpemU7XG4rXHRmcmVlX2JpdG1hcF9ieXRlcyA9IEJJVFNfVE9fQllURVMoKHU2NCl1c3BpLVx1MDAzZXNfZnBnKTtcbitcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xuK1x0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxuK1x0ICAgICh1NjQpdWNwaS1cdTAwM2VjX2ZyZWVvZmYgKyBmcmVlX2JpdG1hcF9ieXRlcyBcdTAwM2UgY2dfYnl0ZXMpIHtcbitcdFx0ZXJyID0gXCJjeWxpbmRlciBncm91cCAldSBoYXMgaW52YWxpZCBmcmVlIGJpdG1hcFwiO1xuK1x0XHRnb3RvIGZhaWxlZDtcbitcdH1cbitcbiBcdFVGU0QoXCJFWElUXFxuXCIpO1xuIFx0cmV0dXJuIHRydWU7XG4gXHRcbkBAIC03NSw3ICs4OSw3IEBAIHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRmb3IgKGogPSAxOyBqIFx1MDAzYyBpOyBqKyspXG4gXHRcdGJyZWxzZShVQ1BJX1VCSCh1Y3BpKS1cdTAwM2ViaFtqXSk7XG4gXHRzYmktXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBVRlNfQ0dOT19FTVBUWTtcbi1cdHVmc19lcnJvciAoc2IsIFwidWZzX3JlYWRfY3lsaW5kZXJcIiwgXCJjYW4ndCByZWFkIGN5bGluZGVyIGdyb3VwIGJsb2NrICV1XCIsIGNnbm8pO1xuK1x0dWZzX2Vycm9yKHNiLCBcInVmc19yZWFkX2N5bGluZGVyXCIsIGVyciwgY2dubyk7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MTUuODQ4NTA1NDc2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzMTgzNjg3MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVRlMgQ3lsaW5kZXIgR3JvdXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggYSBwYXRjaCBmb3IgYGZzL3Vmcy9jeWxpbmRlci5jYCwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGl0IGRvZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIFVGUyBmaWxlc3lzdGVtLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBjeWxpbmRlciBncm91cHMgYXJlIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIFVGUywgc28gdGhpcyBpcyB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5UaGUgZGlmZiBpdHNlbGYgcHJvdmlkZXMgdGhlIGZpcnN0IGNsdWUuIEl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgYHVmc19yZWFkX2N5bGluZGVyYCBmdW5jdGlvbiwgd2hpY2gsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCBkZWFscyB3aXRoIHJlYWRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGRpc2suIFRoZSBhZGRlZCBjb2RlIGludHJvZHVjZXMgdHdvIG5ldyB2YXJpYWJsZXMsIGBjZ19ieXRlc2AgYW5kIGBmcmVlX2JpdG1hcF9ieXRlc2AsIGJvdGggb2Ygd2hpY2ggYXJlIG9mIHR5cGUgYHU2NGAuIEkgc3VzcGVjdCB0aGVzZSB3aWxsIGJlIHVzZWQgZm9yIHNvbWUgY3J1Y2lhbCBzaXplIGNoZWNrcy4gVGhlIHZhcmlhYmxlIGBlcnJgIG9mIHR5cGUgYGNvbnN0IGNoYXIgKmAgc3VnZ2VzdHMgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgYWRkZWQuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBhIG5ldyB2YWxpZGF0aW9uIHN0ZXAuIFRoZSBwYXRjaCBub3cgY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgY3lsaW5kZXIgZ3JvdXAgaW4gYnl0ZXMgKGBjZ19ieXRlc2ApIGFuZCB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZnJlZSBiaXRtYXAgKGBmcmVlX2JpdG1hcF9ieXRlc2ApLiBUaGUgYEJJVFNfVE9fQllURVNgIG1hY3JvIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY2FsY3VsYXRpbmcgdGhlIHNpemUgaW4gYnl0ZXMgZnJvbSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCwgd2hpY2ggaXMgcXVpdGUgY29tbW9uIGZvciB0aGlzIHR5cGUgb2YgYWxsb2NhdGlvbiBkYXRhLlxuXG5UaGUgc3Vic2VxdWVudCBgaWZgIHN0YXRlbWVudCBpcyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBraWNrcyBpbi4gSXQgY2hlY2tzIGlmIHRoZSBgZnJlZV9iaXRtYXBfYnl0ZXNgIGlzIHZhbGlkIGFuZCBpZiB0aGUgc3RhcnRpbmcgb2Zmc2V0IG9mIHRoZSBmcmVlIGJpdG1hcCBwbHVzIGl0cyBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlci4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBwYXRjaCBpcyBpbnRlbmRlZCB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgbWFsZm9ybWVkIGN5bGluZGVyIGdyb3VwIHN0cnVjdHVyZXMuIFRoZSBgZXJyYCB2YXJpYWJsZSwgd2hpY2ggd2lsbCBjb250YWluIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGlmIHN0YXRlbWVudCBpcyB0cnVlLCB3aWxsIGFsc28gYmUgcGFzc2VkIGludG8gdGhlIGB1ZnNfZXJyb3JgIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIHNvbWUgbW9yZSBkZXRhaWxlZCBhbmQgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZXMgYXMgY29tcGFyZWQgdG8gdGhlIG9uZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW4gdGhlIGNvZGUuXG5cbkdpdmVuIG15IGtub3dsZWRnZSBvZiBVRlMsIEknZCBpbW1lZGlhdGVseSB3YW50IHRvIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvdWZzL2N5bGluZGVyLmNgIGFuZCBwb3NzaWJseSBvdGhlciByZWxhdGVkIGZpbGVzLiBJJ2Qgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBgdWZzX3JlYWRfY3lsaW5kZXJgIGlzIGNhbGxlZCwgd2hhdCBvdGhlciBmdW5jdGlvbnMgcmVseSBvbiB0aGUgY3lsaW5kZXIgZ3JvdXAgZGF0YSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2hlY2tzIGJlaW5nIGRvbmUuIEkgc2hvdWxkIGtub3cgd2hhdCBpbXBhY3QgdGhlIGNoYW5nZXMgbWF5IGhhdmUgb24gcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQwNzozMDoyNS4xNjY4Nzc5NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Vmcy9jeWxpbmRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDk1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiAgbGludXgvZnMvdWZzL2N5bGluZGVyLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDE5OThcXG4gICA2OlxcdCAqIERhbmllbCBQaXJrbCBcXHUwMDNjZGFuaWVsLnBpcmtsQGVtYWlsLmN6XFx1MDAzZVxcbiAgIDc6XFx0ICogQ2hhcmxlcyBVbml2ZXJzaXR5LCBGYWN1bHR5IG9mIE1hdGhlbWF0aWNzIGFuZCBQaHlzaWNzXFxuICAgODpcXHQgKlxcbiAgIDk6XFx0ICogIGV4dDIgLSBpbm9kZSAoYmxvY2spIGJpdG1hcCBjYWNoaW5nIGluc3BpcmVkXFxuICAxMDpcXHQgKi9cXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0YXQuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4gIDE3OlxcdFxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9ieXRlb3JkZXIuaFxcdTAwM2VcXG4gIDE5OlxcdFxcbiAgMjA6XFx0I2luY2x1ZGUgXFxcInVmc19mcy5oXFxcIlxcbiAgMjE6XFx0I2luY2x1ZGUgXFxcInVmcy5oXFxcIlxcbiAgMjI6XFx0I2luY2x1ZGUgXFxcInN3YWIuaFxcXCJcXG4gIDIzOlxcdCNpbmNsdWRlIFxcXCJ1dGlsLmhcXFwiXFxuICAyNDpcXHRcXG4gIDI1OlxcdC8qXFxuICAyNjpcXHQgKiBSZWFkIGN5bGluZGVyIGdyb3VwIGludG8gY2FjaGUuIFRoZSBtZW1vcnkgc3BhY2UgZm9yIHVmc19jZ19wcml2YXRlX2luZm9cXG4gIDI3OlxcdCAqIHN0cnVjdHVyZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdWZzX3JlYWRfc3VwZXIuXFxuICAyODpcXHQgKi9cXG4gIDI5OlxcdHN0YXRpYyBib29sIHVmc19yZWFkX2N5bGluZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuICAzMDpcXHRcXHR1bnNpZ25lZCBjZ25vLCB1bnNpZ25lZCBiaXRtYXBfbnIpXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgdWZzX3NiX2luZm8gKiBzYmkgPSBVRlNfU0Ioc2IpO1xcbiAgMzM6XFx0XFx0c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiB1c3BpO1xcbiAgMzQ6XFx0XFx0c3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1Y3BpO1xcbiAgMzU6XFx0XFx0c3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZztcXG4gIDM2OlxcdFxcdHU2NCBjZ19ieXRlcywgZnJlZV9iaXRtYXBfYnl0ZXM7XFxuICAzNzpcXHRcXHRjb25zdCBjaGFyICplcnI7XFxuICAzODpcXHRcXHR1bnNpZ25lZCBpLCBqO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRVRlNEKFxcXCJFTlRFUiwgY2dubyAldSwgYml0bWFwX25yICV1XFxcXG5cXFwiLCBjZ25vLCBiaXRtYXBfbnIpO1xcbiAgNDE6XFx0XFx0dXNwaSA9IHNiaS1cXHUwMDNlc191c3BpO1xcbiAgNDI6XFx0XFx0dWNwaSA9IHNiaS1cXHUwMDNlc191Y3BpW2JpdG1hcF9ucl07XFxuICA0MzpcXHRcXHR1Y2cgPSAoc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqKXNiaS1cXHUwMDNlc191Y2dbY2dub10tXFx1MDAzZWJfZGF0YTtcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0VUNQSV9VQkgodWNwaSktXFx1MDAzZWZyYWdtZW50ID0gdWZzX2NnY21pbihjZ25vKTtcXG4gIDQ2OlxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCA9IHVzcGktXFx1MDAzZXNfY2dzaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbiAgNDc6XFx0XFx0LypcXG4gIDQ4OlxcdFxcdCAqIFdlIGhhdmUgYWxyZWFkeSB0aGUgZmlyc3QgZnJhZ21lbnQgb2YgY3lsaW5kZXIgZ3JvdXAgYmxvY2sgaW4gYnVmZmVyXFxuICA0OTpcXHRcXHQgKi9cXG4gIDUwOlxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFswXSA9IHNiaS1cXHUwMDNlc191Y2dbY2dub107XFxuICA1MTpcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgVUNQSV9VQkgodWNwaSktXFx1MDAzZWNvdW50OyBpKyspIHtcXG4gIDUyOlxcdFxcdFxcdFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtpXSA9IHNiX2JyZWFkKHNiLCBVQ1BJX1VCSCh1Y3BpKS1cXHUwMDNlZnJhZ21lbnQgKyBpKTtcXG4gIDUzOlxcdFxcdFxcdGlmICghVUNQSV9VQkgodWNwaSktXFx1MDAzZWJoW2ldKSB7XFxuICA1NDpcXHRcXHRcXHRcXHRlcnIgPSBcXFwiY2FuJ3QgcmVhZCBjeWxpbmRlciBncm91cCBibG9jayAldVxcXCI7XFxuICA1NTpcXHRcXHRcXHRcXHRnb3RvIGZhaWxlZDtcXG4gIDU2OlxcdFxcdFxcdH1cXG4gIDU3OlxcdFxcdH1cXG4gIDU4OlxcdFxcdHNiaS1cXHUwMDNlc19jZ25vW2JpdG1hcF9ucl0gPSBjZ25vO1xcbiAgNTk6XFx0XFx0XFx0XFx0XFxuICA2MDpcXHRcXHR1Y3BpLVxcdTAwM2VjX2NneFxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfY2d4KTtcXG4gIDYxOlxcdFxcdHVjcGktXFx1MDAzZWNfbmN5bFxcdD0gZnMxNl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfbmN5bCk7XFxuICA2MjpcXHRcXHR1Y3BpLVxcdTAwM2VjX25pYmxrXFx0PSBmczE2X3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uaWJsayk7XFxuICA2MzpcXHRcXHR1Y3BpLVxcdTAwM2VjX25kYmxrXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uZGJsayk7XFxuICA2NDpcXHRcXHR1Y3BpLVxcdTAwM2VjX3JvdG9yXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19yb3Rvcik7XFxuICA2NTpcXHRcXHR1Y3BpLVxcdTAwM2VjX2Zyb3RvclxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfZnJvdG9yKTtcXG4gIDY2OlxcdFxcdHVjcGktXFx1MDAzZWNfaXJvdG9yXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19pcm90b3IpO1xcbiAgNjc6XFx0XFx0dWNwaS1cXHUwMDNlY19idG90b2ZmXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19idG90b2ZmKTtcXG4gIDY4OlxcdFxcdHVjcGktXFx1MDAzZWNfYm9mZlxcdD0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfYm9mZik7XFxuICA2OTpcXHRcXHR1Y3BpLVxcdTAwM2VjX2l1c2Vkb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfaXVzZWRvZmYpO1xcbiAgNzA6XFx0XFx0dWNwaS1cXHUwMDNlY19mcmVlb2ZmXFx0PSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19mcmVlb2ZmKTtcXG4gIDcxOlxcdFxcdHVjcGktXFx1MDAzZWNfbmV4dGZyZWVvZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ19uZXh0ZnJlZW9mZik7XFxuICA3MjpcXHRcXHR1Y3BpLVxcdTAwM2VjX2NsdXN0ZXJzdW1vZmYgPSBmczMyX3RvX2NwdShzYiwgdWNnLVxcdTAwM2VjZ191LmNnXzQ0LmNnX2NsdXN0ZXJzdW1vZmYpO1xcbiAgNzM6XFx0XFx0dWNwaS1cXHUwMDNlY19jbHVzdGVyb2ZmID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19jbHVzdGVyb2ZmKTtcXG4gIDc0OlxcdFxcdHVjcGktXFx1MDAzZWNfbmNsdXN0ZXJibGtzID0gZnMzMl90b19jcHUoc2IsIHVjZy1cXHUwMDNlY2dfdS5jZ180NC5jZ19uY2x1c3RlcmJsa3MpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRjZ19ieXRlcyA9IFVDUElfVUJIKHVjcGkpLVxcdTAwM2Vjb3VudCAqIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gIDc3OlxcdFxcdGZyZWVfYml0bWFwX2J5dGVzID0gQklUU19UT19CWVRFUygodTY0KXVzcGktXFx1MDAzZXNfZnBnKTtcXG4gIDc4OlxcdFxcdC8qIFRoZSBmdWxsIGZyZWUgYml0bWFwIG11c3QgZml0IGluIHRoZSBsb2FkZWQgQ0cgYnVmZmVyLiAqL1xcbiAgNzk6XFx0XFx0aWYgKCFmcmVlX2JpdG1hcF9ieXRlcyB8fFxcbiAgODA6XFx0XFx0ICAgICh1NjQpdWNwaS1cXHUwMDNlY19mcmVlb2ZmICsgZnJlZV9iaXRtYXBfYnl0ZXMgXFx1MDAzZSBjZ19ieXRlcykge1xcbiAgODE6XFx0XFx0XFx0ZXJyID0gXFxcImN5bGluZGVyIGdyb3VwICV1IGhhcyBpbnZhbGlkIGZyZWUgYml0bWFwXFxcIjtcXG4gIDgyOlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiAgODM6XFx0XFx0fVxcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRVRlNEKFxcXCJFWElUXFxcXG5cXFwiKTtcXG4gIDg2OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgODc6XFx0XFx0XFxuICA4ODpcXHRmYWlsZWQ6XFxuICA4OTpcXHRcXHRmb3IgKGogPSAxOyBqIFxcdTAwM2MgaTsgaisrKVxcbiAgOTA6XFx0XFx0XFx0YnJlbHNlKFVDUElfVUJIKHVjcGkpLVxcdTAwM2ViaFtqXSk7XFxuICA5MTpcXHRcXHRzYmktXFx1MDAzZXNfY2dub1tiaXRtYXBfbnJdID0gVUZTX0NHTk9fRU1QVFk7XFxuICA5MjpcXHRcXHR1ZnNfZXJyb3Ioc2IsIFxcXCJ1ZnNfcmVhZF9jeWxpbmRlclxcXCIsIGVyciwgY2dubyk7XFxuICA5MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA5NDpcXHR9XFxuICA5NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMDc6MzA6MjUuMTY3MDAxMTk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjY4MDQzNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgVUZTIEN5bGluZGVyIEdyb3VwIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBhIHNhbml0eSBjaGVjayB3aXRoaW4gdGhlIFVGUyBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBpbiBgdWZzX3JlYWRfY3lsaW5kZXJgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIHBhdGNo4oCZcyBpbXBhY3QsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBhbmQgc3BlY2lmaWNhbGx5LCBLTVNBTi4gVGhlIHBhdGNoIGFkZHMgY2hlY2tzIG9uIGB1Y3BpLVx1MDAzZWNfZnJlZW9mZmAgYW5kIHRoZSBjYWxjdWxhdGVkIGBmcmVlX2JpdG1hcF9ieXRlc2AgYWdhaW5zdCB0aGUgYnVmZmVyIHNpemUgYGNnX2J5dGVzYC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zIFwiYm91bmRzIGNoZWNrLFwiIHdoaWNoIGlzIGV4Y2VsbGVudC5cblxuSSByYW4gdGhyb3VnaCB0aGUgc2NlbmFyaW9zIGluIG15IGhlYWQuIEZpcnN0LCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgdXNlZCBpbiBhIHdheSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiBUaGUgYGVycmAgdmFyaWFibGUgaXMgYWx3YXlzIHNldCBiZWZvcmUgYW55IHBvdGVudGlhbCBlcnJvciByZXR1cm4gdmlhIGBnb3RvIGZhaWxlZGAuIFNlY29uZCwgdGhlcmUncyBubyBldmlkZW5jZSBvZiBrZXJuZWwgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB3aGljaCBpcyBhIG1ham9yIHdpbi4gVGhlIGNvZGUgZG9lc24ndCB0b3VjaCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy4gVGhpcmQsIHRoZSBicmFuY2hpbmcgbG9naWMgZG9lc24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsc28gZ29vZC4gRm91cnRoLCB0aGUgcGF0Y2ggZG9lc24ndCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgc28gd2UgYXJlIHNhZmUgdGhlcmUuXG5cblRoYXQncyB3aGVuIEkgem9vbWVkIGluIG9uIHRoZSBib3VuZHMgY2hlY2suIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGVuc3VyaW5nIHRoYXQgYWNjZXNzaW5nIHRoZSBmcmVlIGJpdG1hcCBkb2Vzbid0IGdvIGJleW9uZCBgY2dfYnl0ZXNgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBzcGF0aWFsIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9uIHRoYXQgS0FTQU4gZXhjZWxzIGF0IGRldGVjdGluZy4gSXQgZGlyZWN0bHkgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gY29ycnVwdGVkIGZpbGVzeXN0ZW1zLCB3aGljaCBpcyBleGFjdGx5IHRoZSB0eXBlIG9mIGJ1ZyBLQVNBTiBpcyBidWlsdCB0byBmaW5kLlxuXG5JIGRvdWJsZS1jaGVja2VkOiBLQVNBTiBjb3ZlcnMgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGV0Yy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQga2VybmVsLXRvLXVzZXIgbGVha3MuIFRoaXMgYnVnIGlzIGV4cGxpY2l0bHkgYWJvdXQgYSBib3VuZHMgY2hlY2ssIHdoaWNoIGlzIGEgc3BhdGlhbCBzYWZldHkgaXNzdWUuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uLCByZWFkaW5nLCBvciBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuVG8gc29saWRpZnkgdGhpcyBjb25jbHVzaW9uLCBJIHByZXBhcmVkIGEgY2xlYXIgcmVhc29uaW5nIHN1bW1hcnkuIFRoaXMgcGF0Y2ggdmFsaWRhdGVzIHRoZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBiaXRtYXAgYWdhaW5zdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzaXplLiBJdCBwcmV2ZW50cyBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3MgZHVyaW5nIG9wZXJhdGlvbnMgb24gcG90ZW50aWFsbHkgY29ycnVwdGVkIFVGUyBpbWFnZXMuIFRoaXMga2luZCBvZiBhY2Nlc3MgaXMgcHJlY2lzZWx5IHdoYXQgS0FTQU4gaXMgaW50ZW5kZWQgZm9yLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgdW5uZWNlc3NhcnkuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDEzLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDA3OjMwOjQ2LjgzNTA0NjM5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyB2YWxpZGF0aW9uIGluIGB1ZnNfcmVhZF9jeWxpbmRlcigpYCB0byB2ZXJpZnkgdGhhdCB0aGUgY3lsaW5kZXIgZ3JvdXAgZnJlZSBibG9jayBiaXRtYXAgKGBjX2ZyZWVvZmZgIHBsdXMgYGZyZWVfYml0bWFwX2J5dGVzYCkgZG9lcyBub3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgdGhlIGxvYWRlZCBjeWxpbmRlciBncm91cCBidWZmZXIgKGBjZ19ieXRlc2ApLiBUaGlzIHByZXZlbnRzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGN5bGluZGVyIGdyb3VwIGRhdGEgZnJvbSBhIGNyYWZ0ZWQvY29ycnVwdGVkIGZpbGVzeXN0ZW0gaW1hZ2UuXFxuXFxuT3V0LW9mLWJvdW5kcyBtZW1vcnkgZXJyb3JzIGFyZSBzcGF0aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGZ1bGx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mbyBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHZhbGlkYXRpb24gaW4gYHVmc19yZWFkX2N5bGluZGVyKClgIHRvIHZlcmlmeSB0aGF0IHRoZSBjeWxpbmRlciBncm91cCBmcmVlIGJsb2NrIGJpdG1hcCAoYGNfZnJlZW9mZmAgcGx1cyBgZnJlZV9iaXRtYXBfYnl0ZXNgKSBkb2VzIG5vdCBleGNlZWQgdGhlIGJvdW5kcyBvZiB0aGUgbG9hZGVkIGN5bGluZGVyIGdyb3VwIGJ1ZmZlciAoYGNnX2J5dGVzYCkuIFRoaXMgcHJldmVudHMgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgY3lsaW5kZXIgZ3JvdXAgZGF0YSBmcm9tIGEgY3JhZnRlZC9jb3JydXB0ZWQgZmlsZXN5c3RlbSBpbWFnZS5cXG5cXG5PdXQtb2YtYm91bmRzIG1lbW9yeSBlcnJvcnMgYXJlIHNwYXRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgZnVsbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[1] Phase: Succeeded StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 07:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2] Phase: Succeeded StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 07:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 07:30:58 +0000 UTC FinishedAt: 2026-09-02 07:31:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2906487126/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 07:31:09 +0000 UTC FinishedAt: 2026-09-02 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 07:31:09 +0000 UTC FinishedAt: 2026-09-02 07:51:13 +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:*fd1eb2b2-c134-4c93-b95b-0e14be9d1bba,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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2906487126/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": "e7e067cf-525d-4411-9f38-146c8bce382e", "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-workflowfp5z6/series-workflowfp5z6-build-action-3865204204/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 07:31:09 +0000 UTC FinishedAt: 2026-09-02 07:51:03 +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:*fd1eb2b2-c134-4c93-b95b-0e14be9d1bba,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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2906487126/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": "e7e067cf-525d-4411-9f38-146c8bce382e", "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-workflowfp5z6/series-workflowfp5z6-build-action-3865204204/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 07:51:13 +0000 UTC FinishedAt: 2026-09-02 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 07:51:13 +0000 UTC FinishedAt: 2026-09-02 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 07:51:13 +0000 UTC FinishedAt: 2026-09-02 07:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 07:51:13 +0000 UTC FinishedAt: 2026-09-02 07:51:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2145034217/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 07:51:23 +0000 UTC FinishedAt: 2026-09-02 07:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 07:51:23 +0000 UTC FinishedAt: 2026-09-02 07:53:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7e067cf-525d-4411-9f38-146c8bce382e,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-workflowfp5z6/series-workflowfp5z6-build-action-3865204204/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-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 07:53:46 +0000 UTC FinishedAt: 2026-09-02 07:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 07:53:46 +0000 UTC FinishedAt: 2026-09-02 07:53:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 07:53:46 +0000 UTC FinishedAt: 2026-09-02 08:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 07:53:46 +0000 UTC FinishedAt: 2026-09-02 08:13:13 +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:*fd1eb2b2-c134-4c93-b95b-0e14be9d1bba,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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2145034217/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": "a2b08220-f337-4d26-824b-4f073f079958", "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-workflowfp5z6/series-workflowfp5z6-build-action-2341396421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 07:53:46 +0000 UTC FinishedAt: 2026-09-02 08:13:03 +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:*fd1eb2b2-c134-4c93-b95b-0e14be9d1bba,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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2145034217/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": "a2b08220-f337-4d26-824b-4f073f079958", "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-workflowfp5z6/series-workflowfp5z6-build-action-2341396421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 08:13:13 +0000 UTC FinishedAt: 2026-09-02 08:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 08:13:13 +0000 UTC FinishedAt: 2026-09-02 08:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 08:13:13 +0000 UTC FinishedAt: 2026-09-02 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 08:13:13 +0000 UTC FinishedAt: 2026-09-02 08:15:00 +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:*a2b08220-f337-4d26-824b-4f073f079958,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-workflowfp5z6/series-workflowfp5z6-build-action-2341396421/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-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e7e067cf-525d-4411-9f38-146c8bce382e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2b08220-f337-4d26-824b-4f073f079958,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-workflowfp5z6/series-workflowfp5z6-build-action-3865204204/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-workflowfp5z6/series-workflowfp5z6-build-action-2341396421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfp5z6/series-workflowfp5z6-convert-artifact-2427701566/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 08:15:10 +0000 UTC FinishedAt: 2026-09-02 08:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 08:15:20 +0000 UTC FinishedAt: 2026-09-02 08:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfp5z6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ufs_load_cylinder","ufs_new_inode","ufs_free_inode","ufs_free_fragments","ufs_free_blocks"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"786262be6048deab760f68c8acc2c85607165894","config_name":"upstream-apparmor-kasan.config","enable_configs":["UFS_FS","UFS_FS_WRITE"],"series_id":"a3860947-22ea-48a9-8981-5196af809be2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 08:15:20 +0000 UTC FinishedAt: 2026-09-02 08:58:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e7e067cf-525d-4411-9f38-146c8bce382e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2b08220-f337-4d26-824b-4f073f079958,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-workflowfp5z6/series-workflowfp5z6-build-action-3865204204/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-workflowfp5z6/series-workflowfp5z6-build-action-2341396421/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-workflowfp5z6/series-workflowfp5z6-convert-artifact-2427701566/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,}