Name: series-workflowxhb5f Phase: Failed StartedAt: 2026-08-17 04:05:17 +0000 UTC FinishedAt: 2026-08-17 04:54:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhb5f[0] Phase: Succeeded StartedAt: 2026-08-17 04:05:17 +0000 UTC FinishedAt: 2026-08-17 04:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhb5f[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 04:05:17 +0000 UTC FinishedAt: 2026-08-17 04:54:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDQ6NDk6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0zNTAsNyAmIzQzOzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEmIzM5O3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC5cbiBcdCAqL1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuJiM0MztcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDQ6NDk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLAogCSAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLgogCSAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC4KIAkgKi8KLQlhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgJmFtcDtkc3QtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLSZndDthbm9uX3ZtYTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBDbG9uaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIHRhcmdldCBgbW0vcm1hcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGxpbmU6IGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpO2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLgoKTGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3dhcHBpbmcgb3V0IGBzcmMtJmd0O2Fub25fdm1hYCBmb3IgYGFjdGl2ZV9hbm9uX3ZtYWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5LiBJcyB0aGUgYGFjdGl2ZV9hbm9uX3ZtYWAgYSB2YWxpZCBhbmQgY29ycmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jayBtaXRpZ2F0aW9uIGhlcmU/IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2Nsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9ybWFwLmMtMjkyLS8qKlxubW0vcm1hcC5jOjI5MzogKiBhbm9uX3ZtYV9jbG9uZSAtIEVzdGFibGlzaGVzIG5ldyBhbm9uX3ZtYV9jaGFpbiBvYmplY3RzIGluIEBkc3QgbGlua2luZyB0b1xubW0vcm1hcC5jLTI5NC0gKiBhbGwgb2YgdGhlIGFub25fdm1hIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBAc3JjIGFub25fdm1hX2NoYWluJiMzOTtzLlxuLS1cbm1tL3JtYXAuYy0zMTktICovXG5tbS9ybWFwLmM6MzIwOmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG5tbS9ybWFwLmMtMzIxLVx0XHQgICBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxuLS1cbm1tL3JtYXAuYy0zMjUtXG5tbS9ybWFwLmM6MzI2Olx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XG5tbS9ybWFwLmMtMzI3LVxuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtNDAzLVx0ICovXG5tbS9ybWFwLmM6NDA0Olx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcbm1tL3JtYXAuYy00MDUtXHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuLS1cbm1tL3JtYXAuYy00NDQtLypcbm1tL3JtYXAuYzo0NDU6ICogSW4gdGhlIHVuZm9ydHVuYXRlIGNhc2Ugb2YgYW5vbl92bWFfY2xvbmUoKSBmYWlsaW5nIHRvIGFsbG9jYXRlIG1lbW9yeSB3ZVxubW0vcm1hcC5jLTQ0Ni0gKiBoYXZlIHRvIGNsZWFuIHRoaW5ncyB1cC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgYW5vbl92bWFfY2xvbmVgLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsIC0gaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHV6emxlLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGNsb25pbmcgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIGltbWVkaWF0ZWx5IHJlY2FsbCBzZWVpbmcgaXQgdXNlZCBpbiBgYW5vbl92bWFfZm9ya2AuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaGludCBhdCBpdHMgcm9sZSBkdXJpbmcgcHJvY2VzcyBmb3JraW5nIGFuZCBjb3B5LW9uLXdyaXRlIG9wZXJhdGlvbnMuCgpHaXZlbiBpdHMgY3JpdGljYWwgbmF0dXJlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbml0dHktZ3JpdHR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9ybWFwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRldGFpbGVkIGltcGxlbWVudGF0aW9uIG9mIGBhbm9uX3ZtYV9jbG9uZWAgYW5kIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCByZXZlcnNlIG1hcCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gcmVhbGx5IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMzIxOlx0XHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4gMzIyOlx0e1xuIDMyMzpcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpwYXZjO1xuIDMyNDpcdFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG4gMzI1Olx0XG4gMzI2Olx0XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmICghYWN0aXZlX2Fub25fdm1hKVxuIDMyOTpcdFx0XHRyZXR1cm4gMDtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qXG4gMzMyOlx0XHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXG4gMzMzOlx0XHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xuIDMzNDpcdFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cbiAzMzU6XHRcdCAqXG4gMzM2Olx0XHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxuIDMzNzpcdFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVx1MDAzZXZtX21tIGFuZCBkc3QgaXNcbiAzMzg6XHRcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxuIDMzOTpcdFx0ICogdW5saW5rZWQgQVZDJiMzOTtzIGJlaW5nIG9ic2VydmVkIHlldC5cbiAzNDA6XHRcdCAqL1xuIDM0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYXZjLCBcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzQyOlx0XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM0MzpcdFx0XHRpZiAoIWF2YylcbiAzNDQ6XHRcdFx0XHRnb3RvIGVub21lbV9mYWlsdXJlO1xuIDM0NTpcdFxuIDM0NjpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LypcbiAzNTA6XHRcdCAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIDM1MTpcdFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSYjMzk7cyBzaGFyZSB0aGUgc2FtZSByb290LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzU0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzU1Olx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gMzU2Olx0XG4gMzU3Olx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gMzU4Olx0XHRcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXG4gMzU5Olx0XHRcdFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XG4gMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLKVxuIDM2MzpcdFx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAzNjQ6XHRcbiAzNjU6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0XG4gMzY4Olx0IGVub21lbV9mYWlsdXJlOlxuIDM2OTpcdFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xuIDM3MDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdC8qXG4gMzc0Olx0ICogQXR0YWNoIHZtYSB0byBpdHMgb3duIGFub25fdm1hLCBhcyB3ZWxsIGFzIHRvIHRoZSBhbm9uX3ZtYXMgdGhhdFxuIDM3NTpcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXG4gMzc2Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXG4gMzc3Olx0ICovXG4gMzc4Olx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAzODE6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG4gMzgyOlx0XHRpbnQgcmM7XG4gMzgzOlx0XG4gMzg0Olx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cbiAzODU6XHRcdGlmICghcHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiAzODY6XHRcdFx0cmV0dXJuIDA7XG4gMzg3Olx0XG4gMzg4Olx0XHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbiAzODk6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG4gMzkwOlx0XG4gMzkxOlx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMzkyOlx0XHRpZiAoIWFub25fdm1hKVxuIDM5MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTQ6XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM5NTpcdFx0aWYgKCFhdmMpIHtcbiAzOTY6XHRcdFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcbiAzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk4Olx0XHR9XG4gMzk5Olx0XG4gNDAwOlx0XHQvKlxuIDQwMTpcdFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSYjMzk7cyBhbm9uX3ZtYXMsXG4gNDAyOlx0XHQgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuXG4gNDAzOlx0XHQgKi9cbiA0MDQ6XHRcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG4gNDA1Olx0XHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuIDQwNjpcdFx0aWYgKHJjIHx8IHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuIDQwNzpcdFx0XHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xuIDQwODpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gNDA5Olx0XHRcdHJldHVybiByYztcbiA0MTA6XHRcdH1cbiA0MTE6XHRcbiA0MTI6XHRcdC8qXG4gNDEzOlx0XHQgKiBPSyBubyByZXVzZSwgc28gYWRkIG91ciBvd24gYW5vbl92bWEuXG4gNDE0Olx0XHQgKlxuIDQxNTpcdFx0ICogU2luY2UgaXQgaXMgbm90IGxpbmtlZCBhbnl3aGVyZSB3ZSBjYW4gc2FmZWx5IG1hbmlwdWxhdGUgYW5vbl92bWFcbiA0MTY6XHRcdCAqIGZpZWxkcyB3aXRob3V0IGEgbG9jay5cbiA0MTc6XHRcdCAqL1xuIDQxODpcdFxuIDQxOTpcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGVgIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGNoYW5nZWQgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgLiBUaGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb246IGBzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWE7YCBIbW0sIHdoeSB0aGUgY2hhbmdlPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY291bGQgYHNyYy0mZ3Q7YW5vbl92bWFgIGNoYW5nZSBtaWQtZXhlY3V0aW9uPyBJdCBzaG91bGRuJiMzOTt0LCByaWdodD8gQnV0IG1heWJlIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZD8gCgpJIHF1aWNrbHkgcnVsZWQgb3V0IGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgYXMgdGhlIGN1bHByaXQsIHNpbmNlIHRoYXQmIzM5O3MganVzdCBhIGNoZWNrLiBUaGVuIEkgcmUtZXhhbWluZWQgdGhlIGNvZGUuIEkgc2VlIHRoYXQgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCB3aXRoIGB2bWEsIHB2bWEsIFZNQV9PUF9GT1JLYCBpbiBgYW5vbl92bWFfZm9ya2AsIGFuZCBgcHZtYWAgaXMgYHNyY2AuIFRoZSBtbWFwIGxvY2sgc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgZGF0YSByYWNlcy4gVGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHZzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGxpbmVzLiBJZiBgc3JjLSZndDthbm9uX3ZtYWAgKmRpZCogY2hhbmdlLCB0aGF0JiMzOTtkIGJlIGEgYnVnLiBUaGlzIGNoYW5nZSwgdGhlcmVmb3JlLCBtYXkgYmUgZml4aW5nIGEgbGF0ZW50IGJ1Zy4KCkJ1dCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzbiYjMzk7dCBwcm92aWRlZCwgc28gSSYjMzk7bSBsZWZ0IHRvIHdvbmRlcjogaW4gd2hhdCBzY2VuYXJpbyBjb3VsZCBgc3JjLSZndDthbm9uX3ZtYWAgYmUgZGlmZmVyZW50IGZyb20gYGFjdGl2ZV9hbm9uX3ZtYWA/IEl04oCZcyBub3QganVzdCBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgcmVhZC4gQ291bGQgdGhlcmUgYmUgYW4gYWxpYXNpbmcgaXNzdWU/IElmIGBzcmNgIGlzIHNvbWVob3cgYWxpYXNlZCB0byBgZHN0YCwgdGhlbiBgZHN0LSZndDthbm9uX3ZtYWAgbWlnaHQgYmUgbW9kaWZpZWQuIEFuZCB0aGlzIGFsc28gbWFrZXMgbWUgcmVtZW1iZXIgaG93IGluIGBhbm9uX3ZtYV9mb3JrYCwgYHZtYS0mZ3Q7YW5vbl92bWFgIGlzIHNldCB0byBgTlVMTGAgYmVmb3JlIGNhbGxpbmcgYGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspYC4gSWYgYHNyYyA9PSBkc3RgLCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAsIGJ1dCBgYWN0aXZlX2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAgdG9vLCBhbmQgaXQgd291bGQgcmV0dXJuIGVhcmx5LgoKVGhlbiwgd2FpdCBhIG1pbnV0ZSwgYGFub25fdm1hX2Nsb25lYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYHZtYV9leHBhbmRgLCBgdm1hX21lcmdlYCwgYHZtYV9zcGxpdGAsIGFuZCBvdGhlcnMhIFRoYXQgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgc2lnbmlmaWNhbnRseSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgYW5vbl92bWFfY2xvbmVgLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5vbl92bWFfY2xvbmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0yNTE9ZW51bSB2bWFfb3BlcmF0aW9uIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTI1Ny1cbm1tL2ludGVybmFsLmg6MjU4OmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG5tbS9pbnRlcm5hbC5oLTI1OS1cdGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pO1xuLS1cbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9ybWFwLmMtMzE5LSAqL1xubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vcm1hcC5jLTMyMS1cdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbi0tXG5tbS9ybWFwLmMtMzI1LVxubW0vcm1hcC5jOjMyNjpcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xubW0vcm1hcC5jLTMyNy1cbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTQwMy1cdCAqL1xubW0vcm1hcC5jOjQwNDpcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG5tbS9ybWFwLmMtNDA1LVx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cbi0tXG5tbS9ybWFwLmMtNDQ0LS8qXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2Vcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXG4tLVxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmMtNTM1LVxubW0vdm1hLmM6NTM2Olx0ZXJyID0gYW5vbl92bWFfY2xvbmUobmV3LCB2bWEsIFZNQV9PUF9TUExJVCk7XG5tbS92bWEuYy01MzctXHRpZiAoZXJyKVxuLS1cbm1tL3ZtYS5jPTYxMj1zdGF0aWMgaW50IGR1cF9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbi0tXG5tbS92bWEuYy02MzMtXHRcdGRzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbm1tL3ZtYS5jOjYzNDpcdFx0cmV0ID0gYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIFZNQV9PUF9NRVJHRV9VTkZBVUxURUQpO1xubW0vdm1hLmMtNjM1LVx0XHRpZiAocmV0KVxuLS1cbm1tL3ZtYS5jPTE4NjQ9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTE5MjktXHRcdFx0Z290byBvdXRfZnJlZV92bWE7XG5tbS92bWEuYzoxOTMwOlx0XHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxubW0vdm1hLmMtMTkzMS1cdFx0XHRnb3RvIG91dF9mcmVlX21lbXBvbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBGdW5jdGlvbiBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIHdpdGggYFZNQV9PUF9TUExJVGAsIGBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEYCwgYFZNQV9PUF9SRU1BUGAsIGFuZCBgVk1BX09QX0ZPUktgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHJhbmdlIG9mIG9wZXJhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGBhbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcywgYW5kIHRyeWluZyB0byBzcG90IGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzICpkdXJpbmcqIHRoZSBjbG9uaW5nIHByb2Nlc3M/IFRoZSBjb2RlIHNlZW1zIHRvIGFzc3VtZSBpdCYjMzk7cyBzdGFibGUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoYXQgc2hvdWxkIHByb3RlY3QgdXMgZnJvbSBtb2RpZmljYXRpb25zIHRvIGBzcmMtJmd0O2Fub25fdm1hYCBmcm9tIG90aGVyIHRocmVhZHMuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIHBvdGVudGlhbCBpc3N1ZSBkb3duLgoKVGhlbiBJIHNoaWZ0ZWQgdG8gd29ycnlpbmcgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJlY2F1c2UgaXQgKmRvZXMqIGRlYWwgd2l0aCBgZHN0LSZndDthbm9uX3ZtYWAsIGFuZCBtYXliZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaGVyZS4gQnV0IEkgcXVpY2tseSByZWFsaXplIGl0JiMzOTtzIG9ubHkgKmFzc2lnbmluZyogZmllbGRzIHdpdGhpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBhdmNgIHN0cnVjdHVyZTsgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IG1vZGlmeWluZyB0aGUgdW5kZXJseWluZyBgYW5vbl92bWFgIGRhdGEgc3RydWN0dXJlcywgc28gdGhhdCYjMzk7cyBub3QgYSByYWNlIGNvbmRpdGlvbiBlaXRoZXIuIFdlIGFyZSBzYWZlLCBmb3Igbm93LgoKSSB3ZW50IGJhY2sgYW5kIHJlLWV4YW1pbmVkIHRoZSBjb3JlIGxvb3AgaW4gYGFub25fdm1hX2Nsb25lYDoKCmBgYGMKCWxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewoJCWF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpOwoJCWlmICghYXZjKQoJCQlnb3RvIGVub21lbV9mYWlsdXJlOwoKCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtJmd0O2Fub25fdm1hKTsKCX0KYGBgCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBgc3JjYCBhbmQgYGRzdGAgY291bGQgYWN0dWFsbHkgYmUgdGhlIHNhbWUgVk1BPyBUaGVuIHRoYXQgd291bGQgY2F1c2UgcHJvYmxlbXMsIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4gQWgsIG5vLCB0aGUgY29kZSBleHBsaWNpdGx5IGNsb25lcyBWTUFzLiBTbyB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gKm11c3QqIGJlIGRpZmZlcmVudCBWTUFzLiBPaywgdGhhdCYjMzk7cyBmaW5lLgoKQnV0IHdoYXQgYWJvdXQgdGhlICpwb2ludGVyKiB0byBgc3JjLSZndDthbm9uX3ZtYWAgaXRzZWxmPyBDb3VsZCAqdGhhdCogYmUgbW9kaWZpZWQgYnkgc29tZXRoaW5nIGVsc2U/IExldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAgZnVuY3Rpb24gYWdhaW4sIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgaXQmIzM5O3Mgbm90IGRvaW5nIGFueXRoaW5nIGRhbmdlcm91cy4gSXQgbG9va3MgbGlrZSBpdCBpcyBub3QsIHNvIHdlIGFyZSBzdGlsbCBnb29kLiBUaGlzIGxvb2tzIHNhZmUuIFRoZSBvcmlnaW5hbCBgYW5vbl92bWFgIHJlbWFpbnMgdW50b3VjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9jaGFpbl9hc3NpZ24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE0NT1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9mcmVlKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYW5vbl92bWFfY2hhaW4pXG4tLVxubW0vcm1hcC5jLTE0OS1cbm1tL3JtYXAuYzoxNTA6c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTE1MS1cdFx0XHRcdCAgc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsXG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMTItXHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jOjIxMzpcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMjE0LVx0XHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFx1MDAyNmFub25fdm1hLVx1MDAzZXJiX3Jvb3QpO1xuLS1cbm1tL3JtYXAuYz0zMjA9aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9ybWFwLmMtMzQ1LVxubW0vcm1hcC5jOjM0NjpcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKGRzdCwgYXZjLCBwYXZjLVx1MDAzZWFub25fdm1hKTtcbm1tL3JtYXAuYy0zNDctXHR9XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MzMtXHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYzo0MzQ6XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbm1tL3JtYXAuYy00MzUtXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBmcm9tIGBtbS9ybWFwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0IOKAkyBpbiBtYW5hZ2luZyBhbm9ueW1vdXMgVk1BIG1hcHBpbmdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIHdpdGggdGhlIHJldmVyc2UgbWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgZm9yIGFub255bW91cyBtZW1vcnkuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlIGluIGVzdGFibGlzaGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGBhbm9uX3ZtYWAgc3RydWN0dXJlcywgVk1BcywgYW5kIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgY2hhaW5pbmcgYXNwZWN0LiBJIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgY2FuIGVmZmljaWVudGx5IHRyYWNrIHdoaWNoIHBhZ2VzIGJlbG9uZyB0byB3aGljaCBWTUFzLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMgb2YgY29weS1vbi13cml0ZSBvciBzaGFyZWQgbWFwcGluZ3MuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgaXQgdXBkYXRlcyB0aGUgYGFub25fdm1hX2NoYWluYCBzdHJ1Y3R1cmVzIGFuZCB3aGV0aGVyIGl0IGhhbmRsZXMgYW55IHJhY2VzIG9yIGxvY2tpbmcuIFRoZSBnb2FsIGlzIHRvIHNvbGlkaWZ5IGhvdyB0aGUgd2hvbGUgcmV2ZXJzZSBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGlzIG1haW50YWluZWQgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gTlVNQSBvciBvdGhlciBjb21wbGV4IHNjZW5hcmlvcy4gSSBzaG91bGQgY29tcGFyZSBpdCB3aXRoIHRoZSBub24tYW5vbnltb3VzIFZNQXMgYW5kIHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiBybWFwIHRvIHJlZnJlc2ggbXkgcmVjb2xsZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ5Olx0XG4gMTUwOlx0c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDE1MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YyxcbiAxNTI6XHRcdFx0XHRcdCAgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiAxNTM6XHR7XG4gMTU0Olx0XHRhdmMtXHUwMDNldm1hID0gdm1hO1xuIDE1NTpcdFx0YXZjLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG4gMTU2Olx0XHRsaXN0X2FkZChcdTAwMjZhdmMtXHUwMDNlc2FtZV92bWEsIFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbik7XG4gMTU3Olx0fVxuIDE1ODpcdFxuIDE1OTpcdC8qKlxuIDE2MDpcdCAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cbiAxNjE6XHQgKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvblxuIDE2MjpcdCAqXG4gMTYzOlx0ICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJiMzOTt2bWEmIzM5OyBoYXNcbiAxNjQ6XHQgKiBhbiAmIzM5O2Fub25fdm1hJiMzOTsgYXR0YWNoZWQgdG8gaXQsIHNvIHRoYXQgd2UgY2FuIGFzc29jaWF0ZSB0aGVcbiAxNjU6XHQgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLlxuIDE2NjpcdCAqXG4gMTY3Olx0ICogVGhlIGNvbW1vbiBjYXNlIHdpbGwgYmUgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgb25lLCB3aGljaFxuIDE2ODpcdCAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSYWNlcyBpbiBhbm9uX3ZtYV9jbG9uZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwb3RlbnRpYWwgaXNzdWUuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAgd2FzIG1vZGlmeWluZyBgc3JjLSZndDthbm9uX3ZtYWAsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgcGFydCBpcyBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAuIFRoZSBxdWVzdGlvbiBpcywgd2h5IGFyZSB3ZSBsb2NraW5nIGBzcmMtJmd0O2Fub25fdm1hYD8gQ291bGQgYHNyY2AgYmUgZnJlZWQgb3IgbW9kaWZpZWQ/IE5vLCBpdCYjMzk7cyBhIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmAsIHdoaWNoIGlzIGdvb2QuCgpUaGVuIEkgZW50ZXJ0YWluZWQgdGhlIGlkZWEgdGhhdCBgc3JjYCBtaWdodCBiZSB0aGUgc2FtZSBhcyBgZHN0YCwgdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgYW4gaW5maW5pdGUgbG9vcC4gQnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgdXNhZ2UsIEkgZGV0ZXJtaW5lZCB0aGF0JiMzOTtzIG5vdCBwb3NzaWJsZSBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBkb2VzIGhhdmUgdGhlIHBvdGVudGlhbCB0byBsb29wIGluZmluaXRlbHkgaWYgd2UgYWRkIGFuIGVsZW1lbnQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGJ1dCBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSB0aGF0IGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpZmZlcmVudC4KCk5leHQsIEkgY29uc2lkZXJlZCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXRzZWxmIGNvdWxkIGJlIG1vZGlmaWVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiBhIHN1YnNlcXVlbnQgcmVhZCBvZiBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgcmVzdWx0IGluIGEgZGF0YSByYWNlLiBJZiBpdCAqaXMqIG1vZGlmaWVkLCBpdCBzZWVtcyBsaWtlIGEgYnVnLCBiZWNhdXNlIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBhY2NvdW50IGZvciBzdWNoIGEgcG9zc2liaWxpdHkuIE15IHRob3VnaHQgaXMgdGhhdCBLQ1NBTiB3b3VsZCBmbGFnIGEgZGF0YSByYWNlIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzIG9uIGFub3RoZXIgdGhyZWFkLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgY29kZSwgYW5kIHJlYWxpemVkIGBzcmMtJmd0O2Fub25fdm1hYCAqY291bGQqIGJlIE5VTEwuIEJ1dCB0aGVyZSBpcyBhIGNoZWNrLCBgaWYgKCFhY3RpdmVfYW5vbl92bWEpIHJldHVybiAwO2AuIFN0aWxsLCB0aGUgcXVlc3Rpb24gb2Ygd2h5IGl0JiMzOTtzIGxvY2tlZCBmb3Igd3JpdGUsIGlzIGltcG9ydGFudC4KCkkgZHVnIGZ1cnRoZXIuIEluIGBhbm9uX3ZtYV9mb3JrYCwgYHZtYS0mZ3Q7YW5vbl92bWEgPSBOVUxMYCBpcyBjYWxsZWQgYW5kIHRoZW4gYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZC4gSSYjMzk7bSBjaGVja2luZyBvdGhlciBgVk1BX09QYHMgdG8gc2VlIGlmIHRoZXJlIGlzIHNpbWlsYXIgbG9naWMuCgpJIGFsc28gY2hlY2tlZCBmb3IgYFZNQV9PUF9TUExJVGAsIGBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEYCwgYFZNQV9PUF9SRU1BUGAsIGFuZCBmb3VuZCBzaW1pbGFyIHBhdHRlcm5zLiBJbiBhbGwgY2FzZXMsIGBzcmMtJmd0O2Fub25fdm1hYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQuCgpUaGUgbmV4dCB0aGluZyBJIHRob3VnaHQgb2Ygd2FzIHdoZXRoZXIgYHNyY2AgY291bGQgYmUgZnJlZWQuIEJ1dCwgbm8sIHdlIGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpczogQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2Ugd2hlcmUgYSB0aHJlYWQgbW9kaWZpZXMgYHNyYy0mZ3Q7YW5vbl92bWFgPyBUaGUga2V5IGlzIHRoYXQgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgbG9jayBoZWxkICh3cml0ZSBsb2NrKSwgZXhjZXB0IGluIGBhbm9uX3ZtYV9mb3JrYCwgd2hlcmUgaXQmIzM5O3MgYSB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQuIEkgdGhlbiBjb25zaWRlcmVkIGlmIHRoZSBjaGlsZCBpcyBtb2RpZnlpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIGFmdGVyIHRoZSBjbG9uZS4gQnV0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBuZXZlciBtb2RpZmllZCBleGNlcHQgd2hlbiB0aGUgVk1BIGlzIGZyZWVkLCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYSByYWNlLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGxvb2sgZm9yIHdoZXJlIHRoZSBgYW5vbl92bWFgICppcyogbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTE1ODI9c3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuLS1cbm1tL2tzbS5jLTE2MDEtXHQvKiBNdXN0IGdldCByZWZlcmVuY2UgdG8gYW5vbl92bWEgd2hpbGUgc3RpbGwgaG9sZGluZyBtbWFwX2xvY2sgKi9cbm1tL2tzbS5jOjE2MDI6XHRybWFwX2l0ZW0tXHUwMDNlYW5vbl92bWEgPSB2bWEtXHUwMDNlYW5vbl92bWE7XG5tbS9rc20uYy0xNjAzLVx0Z2V0X2Fub25fdm1hKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4tLVxubW0vbW1hcC5jPTE3MzE9X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuLS1cbm1tL21tYXAuYy0xODAxLVx0XHRcdCAqL1xubW0vbW1hcC5jOjE4MDI6XHRcdFx0dG1wLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL21tYXAuYy0xODAzLVx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbi0tXG5tbS9ybWFwLmM9MTUwPXN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTU0LVx0YXZjLVx1MDAzZXZtYSA9IHZtYTtcbm1tL3JtYXAuYzoxNTU6XHRhdmMtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0xNTYtXHRsaXN0X2FkZChcdTAwMjZhdmMtXHUwMDNlc2FtZV92bWEsIFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbik7XG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMTEtXHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG5tbS9ybWFwLmM6MjEyOlx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0yMTMtXHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuLS1cbm1tL3JtYXAuYz0yNzA9c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vcm1hcC5jLTI4NS1cbm1tL3JtYXAuYzoyODY6XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0yODctXHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtMzg4LVx0LyogRHJvcCBpbmhlcml0ZWQgYW5vbl92bWEsIHdlJiMzOTtsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXG5tbS9ybWFwLmM6Mzg5Olx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy0zOTAtXG4tLVxubW0vcm1hcC5jLTQzMi1cdC8qIE1hcmsgdGhpcyBhbm9uX3ZtYSBhcyB0aGUgb25lIHdoZXJlIG91ciBuZXcgKENPV2VkKSBwYWdlcyBnby4gKi9cbm1tL3JtYXAuYzo0MzM6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy00MzQtXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9NDUyPXN0YXRpYyB2b2lkIGNsZWFudXBfcGFydGlhbF9hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTQ2NS1cdCAqL1xubW0vcm1hcC5jOjQ2NjpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtNDY3LX1cbi0tXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNTIxLVx0ICovXG5tbS9ybWFwLmM6NTIyOlx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy01MjMtXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbi0tXG5tbS92bWEuYz0xNDU9c3RhdGljIHZvaWQgaW5pdF9tdWx0aV92bWFfcHJlcChzdHJ1Y3Qgdm1hX3ByZXBhcmUgKnZwLFxuLS1cbm1tL3ZtYS5jLTE1My1cdHZwLVx1MDAzZXZtYSA9IHZtYTtcbm1tL3ZtYS5jOjE1NDpcdHZwLVx1MDAzZWFub25fdm1hID0gdm1hLVx1MDAzZWFub25fdm1hO1xubW0vdm1hLmMtMTU1LVxuLS1cbm1tL3ZtYS5jLTE3MS1cdGlmICghdnAtXHUwMDNlYW5vbl92bWEgXHUwMDI2XHUwMDI2IGFkanVzdClcbm1tL3ZtYS5jOjE3MjpcdFx0dnAtXHUwMDNlYW5vbl92bWEgPSBhZGp1c3QtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYy0xNzMtXG4tLVxubW0vdm1hLmM9NDM5PXN0YXRpYyBib29sIGNhbl92bWFfbWVyZ2VfcmlnaHQoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZyxcbi0tXG5tbS92bWEuYy00NTktXHRyZXR1cm4gIXByZXYtXHUwMDNlYW5vbl92bWEgfHwgIW5leHQtXHUwMDNlYW5vbl92bWEgfHxcbm1tL3ZtYS5jOjQ2MDpcdFx0cHJldi1cdTAwM2Vhbm9uX3ZtYSA9PSBuZXh0LVx1MDAzZWFub25fdm1hO1xubW0vdm1hLmMtNDYxLX1cbi0tXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vdm1hLmMtNjMyLVx0XHR2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChkc3QpO1xubW0vdm1hLmM6NjMzOlx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYy02MzQtXHRcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcbi0tXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3ZtYV9pbml0LmMtNDctXHRkZXN0LVx1MDAzZXZtX2VuZCA9IHNyYy1cdTAwM2V2bV9lbmQ7XG5tbS92bWFfaW5pdC5jOjQ4Olx0ZGVzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbm1tL3ZtYV9pbml0LmMtNDktXHRkZXN0LVx1MDAzZXZtX3Bnb2ZmID0gc3JjLVx1MDAzZXZtX3Bnb2ZmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBhbm9uX3ZtYV9jbG9uZWAgYW5kIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBmcm9tIGBkdXBfYW5vbl92bWFgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYW5vbl92bWFfY2xvbmVgLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRzdC0mZ3Q7YW5vbl92bWFgIGlzIGluaXRpYWxseSBhc3NpZ25lZCBgc3JjLSZndDthbm9uX3ZtYWAsIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIHRvIGNyZWF0ZSBhIGNvcHkgb3Igc2hhcmUgYW4gYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYW5vbl92bWFgIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgdGhpcyBjbG9uaW5nIHByb2Nlc3MuIEluc2lkZSBgYW5vbl92bWFfY2xvbmVgLCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYCBhbmQgYWRkcyBlbnRyaWVzIHRvIGBkc3QtJmd0O2Fub25fdm1hX2NoYWluYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHByb3BhZ2F0ZSB0aGUgbWFwcGluZ3MuIEFuZCBpdCBsb2NrcyBgc3JjLSZndDthbm9uX3ZtYWAgYmVmb3JlIHRoZSBsb29wLiBCdXQsIGlmIGEgbW9kaWZpY2F0aW9uIGhhcHBlbnMgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgLCB0aGF0IGlzIGEgcG90ZW50aWFsIHJhY2UuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyAqbm90KiBtb2RpZmllZCBiZXR3ZWVuIHdoZW4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYXNzaWduZWQgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCBpcyBjYWxsZWQuIFRoZSBvcmlnaW5hbCB0ZXh0IGNvbmZpcm1zIHRoaXMgaXNuJiMzOTt0IHBvc3NpYmxlLCBhcyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlIHNjb3BlIG9mIGBkdXBfYW5vbl92bWFgLgoKSG93ZXZlciwgdGhlIG1vcmUgSSBsb29rIGF0IHRoZSBjb2RlLCBpdCBoaXRzIG1lLiBJbiB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIHRoZSBjb2RlIGlzIGxvY2tpbmcgdGhlIGBzcmMtJmd0O2Fub25fdm1hYCBhbmQgaXQgc2VlbXMgb2RkOgoKKiAgIFRoZSBjb2RlIGdldHMgYGFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWFgLgoqICAgSXQgdGhlbiBsb2NrcyBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKTtgLgoqICAgRmluYWxseSwgdGhlIGNvZGUgdW5sb2NrcyBgYWN0aXZlX2Fub25fdm1hYCB3aXRoIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLgoKVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBsb2NraW5nIGVycm9yIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxseSBhc3NpZ25lZCB0aGUgc2FtZSB2YWx1ZSBhcyBgc3JjLSZndDthbm9uX3ZtYWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHNvbWVob3cgbW9kaWZpZWQgaW4gYmV0d2Vlbj8KClRoZSBgaWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylgIHN0YXRlbWVudCBjYXRjaGVzIG15IGV5ZS4gSWYgdGhlIG9wZXJhdGlvbiBpcyBhIGZvcmsgKGBWTUFfT1BfRk9SS2ApLCBgbWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSlgIGlzIGNhbGxlZC4gSSBuZWVkIHRvIGtub3csIGRvZXMgdGhpcyBmdW5jdGlvbiBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBBIG1vZGlmaWNhdGlvbiB0byBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aGluIHRoaXMgZnVuY3Rpb24gd291bGQgbGVhZCB0byBhIGxvY2svdW5sb2NrIG1pc21hdGNoISBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1heWJlX3JldXNlX2Fub25fdm1hYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjcxOlx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4gMjcyOlx0e1xuIDI3MzpcdFx0LyogSWYgYWxyZWFkeSBwb3B1bGF0ZWQsIG5vdGhpbmcgdG8gZG8uKi9cbiAyNzQ6XHRcdGlmIChkc3QtXHUwMDNlYW5vbl92bWEpXG4gMjc1Olx0XHRcdHJldHVybjtcbiAyNzY6XHRcbiAyNzc6XHRcdC8qXG4gMjc4Olx0XHQgKiBXZSByZXVzZSBhbiBhbm9uX3ZtYSBpZiBhbnkgbGlua2luZyBWTUFzIHdlcmUgdW5tYXBwZWQgYW5kIGl0IGhhc1xuIDI3OTpcdFx0ICogb25seSBhIHNpbmdsZSBjaGlsZCBhdCBtb3N0LlxuIDI4MDpcdFx0ICovXG4gMjgxOlx0XHRpZiAoYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzIFx1MDAzZSAwKVxuIDI4MjpcdFx0XHRyZXR1cm47XG4gMjgzOlx0XHRpZiAoYW5vbl92bWEtXHUwMDNlbnVtX2NoaWxkcmVuIFx1MDAzZSAxKVxuIDI4NDpcdFx0XHRyZXR1cm47XG4gMjg1Olx0XG4gMjg2Olx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbiAyODc6XHRcdGFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7XG4gMjg4Olx0fVxuIDI4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYG1heWJlX3JldXNlX2Fub25fdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGFub25fdm1hYCBzdHJ1Y3R1cmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhYm91dCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkc3QtJmd0O2Fub25fdm1hYC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoYXQgaWYgYHNyY2AgYW5kIGBkc3RgIGFyZSB0aGUgc2FtZT8gQnV0LCB3YWl0LCB0aGF0JiMzOTtzIG5vdCBwb3NzaWJsZSBpbiBgYW5vbl92bWFfZm9ya2A7IGBzcmNgIGFuZCBgZHN0YCBhcmUgZGlzdGluY3QuCgpOZXh0IHRob3VnaHQ6IENvdWxkIGBzcmMtJmd0O2Fub25fdm1hYCBiZSBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGludGVyZmVyZXM/IEkgY29uc2lkZXJlZCBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYnV0IHRoYXQgdGFyZ2V0cyB0aGUgYGF2Yy0mZ3Q7YW5vbl92bWFgIGFuZCBgYXZjLSZndDt2bWFgLCBub3QgZGlyZWN0bHkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBTbywgdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLgoKTm93IEkmIzM5O20gZm9jdXNpbmcgb24gY29uY3VycmVuY3kuIENvdWxkIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gb2YgYHNyY2AgYmUgYSBwcm9ibGVtPyBJZiBzbywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBkYXRhIHJhY2UsIHJpZ2h0PyBBaCwgYW5kIEtDU0FOIChLZXJuZWwgQ29uY3VycmVuY3kgU2FuaXRpemVyKSBtaWdodCBmbGFnIGEgZGF0YSByYWNlIGV2ZW4gaWYgdGhlIHZhbHVlIGRvZXNuJiMzOTt0IGNoYW5nZSEgVGhhdCYjMzk7cyBpdCEgSSByZWNhbGwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGFjdHVhbGx5ICpyZWFkKiB0d2ljZTogb25jZSBhdCB0aGUgYmVnaW5uaW5nIHRvIGluaXRpYWxpemUgYGFjdGl2ZV9hbm9uX3ZtYWAsIGFuZCB0aGVuIGxhdGVyIHRvIGFjcXVpcmUgYSBsb2NrLgoKVGhlIGNvbXBpbGVyIGNvdWxkIHBvdGVudGlhbGx5IHJlbG9hZCB0aGUgdmFsdWUuIEJ1dCwgbW9yZSBpbXBvcnRhbnRseSwgaWYgYW5vdGhlciB0aHJlYWQgaXMgcG90ZW50aWFsbHkgd3JpdGluZyB0byBgc3JjLSZndDthbm9uX3ZtYWAgd2hpbGUgdGhpcyBpcyBoYXBwZW5pbmcsIEtDU0FOIGlzIGdvaW5nIHRvIHNxdWF3aywgZXZlbiBpZiB0aGUgcmVhZCB2YWx1ZSByZW1haW5zIHRoZSBzYW1lLiBUaGUgc2Vjb25kIHJlYWQgb2YgYHNyYy0mZ3Q7YW5vbl92bWFgIGZvciB0aGUgbG9jaywgdGhhdCYjMzk7cyB0aGUgdGVsbC4gSWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGJlaW5nIHJlYWQgdHdpY2UsIEtDU0FOIHdpbGwgY29tcGxhaW4gaWYgdGhlcmUmIzM5O3MgYSBjb25jdXJyZW50IHdyaXRlLgoKU28sIGlmIHRoZXJlJiMzOTtzICpubyogY29uY3VycmVudCB3cml0ZSwgS0NTQU4gd29uJiMzOTt0IGZsYWcgYW55dGhpbmcuIEJ1dCBpZiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdpbGwgZmxhZyB0aGUgZG91YmxlIHJlYWQuCgpPa2F5LCBpcyBgc3JjLSZndDthbm9uX3ZtYWAgbW9kaWZpZWQgYnkgYGNoZWNrX2Fub25fdm1hX2Nsb25lYD8gQmV0dGVyIGNoZWNrIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aGVyZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4gMjQ1Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2c3JjLVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWFub25fdm1hKTtcbiAyNDc6XHRcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXG4gMjQ4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ5Olx0XHQvKlxuIDI1MDpcdFx0ICogT24gZm9yaywgZHN0LVx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcbiAyNTE6XHRcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxuIDI1MjpcdFx0ICovXG4gMjUzOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0LVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNlYW5vbl92bWEgIT0gc3JjLVx1MDAzZWFub25fdm1hKTtcbiAyNTQ6XHRcdC8qXG4gMjU1Olx0XHQgKiBFc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIGFib3ZlIC0gaWYgbm90IGEgbm8tb3AsIHdlIHNob3VsZCBleHBlY3RcbiAyNTY6XHRcdCAqIGRzdC1cdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cbiAyNTc6XHRcdCAqL1xuIDI1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNlxuIDI1OTpcdFx0XHRcdCFkc3QtXHUwMDNlYW5vbl92bWEpO1xuIDI2MDpcdFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiAyNjE6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjI6XHRcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIDI2NDpcdFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiAyNjU6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjY6XHRcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4gMjY3Olx0I2VuZGlmXG4gMjY4Olx0fVxuIDI2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBgYW5vbl92bWFfY2xvbmVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgaXQgKnNob3VsZG4mIzM5O3QqIGJlIG1vZGlmeWluZyBgc3JjLSZndDthbm9uX3ZtYWAgZGlyZWN0bHkuIEJ1dCB0aGVuLCBteSBtaW5kIHJhY2VzIOKAkyB3aGF0IGlmIGFub3RoZXIgdGhyZWFkIHdlcmUgdG8gbW9kaWZ5IGBzcmMtJmd0O2Fub25fdm1hYD8gVGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgYnVnLCBnaXZlbiB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHJpZ2h0PyBUaGUgc3lzdGVtIHNob3VsZCBub3QgYWxsb3cgdGhlIHN0YXRlIHRvIGNoYW5nZSB3aXRoIHRoZSBsb2NrIGluIHBsYWNlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhIGJpdC4gSXMgaXQgZXZlbiAqcG9zc2libGUqIGZvciBgc3JjYCBpdHNlbGYgdG8gYmUgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQ/IFRoYXQgc2VlbXMgdW5saWtlbHksIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXRzZWxmLCBJIHNlZSB0aGlzOgoKYGBgYwoJYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKTsKLi4uCglhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgpTbywgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBiZWluZyBjYWxsZWQgb24gYHNyYy0mZ3Q7YW5vbl92bWFgLiBJZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgcmVhZCB0d2ljZSwgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIGl0LCBhbmQgaXQgaGFwcGVucyB0byBiZSBtb2RpZmllZCBpbiBiZXR3ZWVuLCBpdCB3b3VsZCBsb2NrIG9uZSB2ZXJzaW9uIG9mIHRoZSBhbm9uX3ZtYSBhbmQgdW5sb2NrIGFub3RoZXIhIFRoYXQgc291bmRzIHJlYWxseSBiYWQuIEhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBtb2RpZmllZCwgdGhlbiB3aHkgaXMgdGhlIHZhcmlhYmxlIGNoYW5nZWQgYXQgYWxsPyBJdCBmZWVscyBsaWtlIGp1c3QgYSBjbGVhbnVwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCB3b3VsZG4mIzM5O3QgYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSYjMzk7bSBwcm9iYWJseSBtaXNzaW5nIHNvbWV0aGluZy4KCkJ1dCB0aGVuLCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgYHNyY2AgaXMgYWN0dWFsbHkgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYGRzdC0mZ3Q7YW5vbl92bWFgICppcyogbW9kaWZpZWQgaW5zaWRlIGBtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyEgSWYgYHNyYyA9PSBkc3RgLCB0aGVuLCB5ZXMsIGBzcmMtJmd0O2Fub25fdm1hYCAqaXMqIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFNvLCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAgd291bGQgbG9jayB0aGUgKm9sZCogYGFub25fdm1hYCBwb3RlbnRpYWxseSwgYnV0IHRoZW4gSSByZW1lbWJlciDigJMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGlzIGNhbGxlZCBCRUZPUkUgdGhhdCBsb29wLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bGwgY29kZSBibG9jazoKCmBgYGMKCWFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCAmYW1wO2RzdC0mZ3Q7YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7CgkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy0mZ3Q7YW5vbl92bWE7CgoJCWFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgJmFtcDthbm9uX3ZtYS0mZ3Q7cmJfcm9vdCk7CgkJaWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSykKCQkJbWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7Cgl9CgoJaWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSykKCQlkc3QtJmd0O2Fub25fdm1hLSZndDtudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7OwoKCWFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpOwpgYGAKClNvLCBub3cgSSBzZWUgdGhhdCBgYW5vbl92bWFfbG9ja193cml0ZWAgKmlzKiBjYWxsZWQgKmJlZm9yZSogdGhlIGxvb3Agd2hlcmUgYG1heWJlX3JldXNlX2Fub25fdm1hYCBpcyBjYWxsZWQsIGFuZCBldmVuIGlmIGBzcmMgPT0gZHN0YCwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHJlYWQgYmVmb3JlIHRoZSBtb2RpZmljYXRpb24uIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4KCkJ1dCwgd2FpdC4uLiBjb3VsZCBgZHN0LSZndDthbm9uX3ZtYWAgYmUgbW9kaWZpZWQgYnkgdGhpcyBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2A/IElmIGBzcmMgPT0gZHN0YCwgd291bGQgdGhlIHZhbHVlIG9mIGBzcmMtJmd0O2Fub25fdm1hYCBnZXQgcmVhZCBhZ2FpbiBpbiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWA/IE5vLCBiZWNhdXNlIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBzdGlsbCBjYWxsZWQgYmVmb3JlIHRoYXQgbGluZSBvZiBjb2RlLgoKT2theSwgaXMgaXQgcG9zc2libGUgdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXMgZXZhbHVhdGVkICp3aXRoaW4qIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmdW5jdGlvbiYjMzk7cyBjb2RlIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGFub25fdm1hX2xvY2tfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKgoKQWxyaWdodCwgdGhlIHF1ZXJ5IGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBhbmQgdGhlICYjMzQ7bG9ja193cml0ZSYjMzQ7IHBhcnQgaW1wbGllcyBhIHdyaXRlLXJlbGF0ZWQgbG9ja2luZyBtZWNoYW5pc20uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiBhbm9ueW1vdXMgbWVtb3J5IHJlZ2lvbnMsIGxpa2VseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiAoc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVk1BIGl0c2VsZiksIG9yIHBlcmhhcHMgZXZlbiB3aGVuIGhhbmRsaW5nIGNvcHktb24td3JpdGUgc2NlbmFyaW9zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgdXNlZCB0byBjb25maXJtIHRob3NlIGluaXRpYWwgYXNzdW1wdGlvbnMuIFRpbWUgdG8gaGl0IHRoZSBjb2RlIHNlYXJjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzEtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MjpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQwNzMtXHRcdG1hcHBpbmcgPSBOVUxMO1xuLS1cbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTIxNy1cbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG5tbS9pbnRlcm5hbC5oLTIxOS17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyNzg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzNDktXG5tbS9raHVnZXBhZ2VkLmM6MTM1MDpcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL2todWdlcGFnZWQuYy0xMzUxLVx0YW5vbl92bWFfbG9ja2VkID0gdHJ1ZTtcbi0tXG5tbS9tcmVtYXAuYz0xNDM9c3RhdGljIHZvaWQgdGFrZV9ybWFwX2xvY2tzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21yZW1hcC5jLTE0Ny1cdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpXG5tbS9tcmVtYXAuYzoxNDg6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL21yZW1hcC5jLTE0OS19XG4tLVxubW0vcm1hcC5jPTExMD1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuLS1cbm1tL3JtYXAuYy0xMzItXHRpZiAocndzZW1faXNfbG9ja2VkKFx1MDAyNmFub25fdm1hLVx1MDAzZXJvb3QtXHUwMDNlcndzZW0pKSB7XG5tbS9ybWFwLmM6MTMzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy0xMzQtXHRcdGFub25fdm1hX3VubG9ja193cml0ZShhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMDctXG5tbS9ybWFwLmM6MjA4Olx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMjA5LVx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXG4tLVxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtNDM1LVx0LyogTm93IGxldCBybWFwIHNlZSBpdC4gKi9cbm1tL3JtYXAuYzo0MzY6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy00MzctXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFx1MDAyNmFub25fdm1hLVx1MDAzZXJiX3Jvb3QpO1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbi0tXG5tbS9ybWFwLmM9NjMzPXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTY4OS1cdFx0ICogYW5kIGJhaWwgLS0gY2FuJiMzOTt0IHNpbXBseSB1c2UgcHV0X2Fub25fdm1hKCkgYmVjYXVzZVxubW0vcm1hcC5jOjY5MDpcdFx0ICogd2UmIzM5O2xsIGRlYWRsb2NrIG9uIHRoZSBhbm9uX3ZtYV9sb2NrX3dyaXRlKCkgcmVjdXJzaW9uLlxubW0vcm1hcC5jLTY5MS1cdFx0ICovXG4tLVxubW0vdm1hLmM9MjkxPXN0YXRpYyB2b2lkIHZtYV9wcmVwYXJlKHN0cnVjdCB2bWFfcHJlcGFyZSAqdnApXG4tLVxubW0vdm1hLmMtMzEzLVx0aWYgKHZwLVx1MDAzZWFub25fdm1hKSB7XG5tbS92bWEuYzozMTQ6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUodnAtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzE1LVx0XHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX3ByZV91cGRhdGVfdm1hKHZwLVx1MDAzZXZtYSk7XG4tLVxubW0vdm1hLmM9MzExNz1pbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMTY1LVx0LyogV2UgdXBkYXRlIHRoZSBhbm9uIFZNQSB0cmVlLiAqL1xubW0vdm1hLmM6MzE2NjpcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL3ZtYS5jLTMxNjctXG4tLVxubW0vdm1hLmM9MzIwMz1pbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3ZtYS5jLTMyNDQtXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXG5tbS92bWEuYzozMjQ1Olx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzI0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGltbWVkaWF0ZWx5LiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGl2ZWx5IHNob3J0IGFuZCBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwuIFRoZSBjb21waWxlciBpcyBnb2luZyB0byB0cnkgdG8gc3Vic3RpdHV0ZSB0aGUgZnVuY3Rpb24mIzM5O3MgY29kZSBkaXJlY3RseSB3aGVyZXZlciBpdCYjMzk7cyBjYWxsZWQgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhbmQgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9pbnRlcm5hbC5oYCBjb25maXJtcyBteSBpbml0aWFsIGh5cG90aGVzaXMgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd29ya2luZ3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGxvY2tpbmcgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfbG9ja193cml0ZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuIDIxOTpcdHtcbiAyMjA6XHRcdGRvd25fd3JpdGUoXHUwMDI2YW5vbl92bWEtXHUwMDNlcm9vdC1cdTAwM2Vyd3NlbSk7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdHN0YXRpYyBpbmxpbmUgaW50IGFub25fdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gZG93bl93cml0ZV90cnlsb2NrKFx1MDAyNmFub25fdm1hLVx1MDAzZXJvb3QtXHUwMDNlcndzZW0pO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSYWNlcyBpbiBgYW5vbl92bWFfY2xvbmVgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvc3NpYmxlIGRhdGEgcmFjZSByZXBvcnRlZCBieSBLQ1NBTi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIHVzZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgYW5kIHRoZSBgYW5vbl92bWFfbG9ja193cml0ZWAgZnVuY3Rpb24uIFRoZSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCByZWFkaW5nIGBzcmMtJmd0O2Fub25fdm1hYCB0d2ljZSBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLCBvciBpbmRpY2F0ZSBhIHJlYWwgYnVnIGlmIGl0JiMzOTtzIG1vZGlmaWFibGUuIExldCYjMzk7cyB0cmFjZSBpdCBjYXJlZnVsbHkuCgpGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc3JjYCBwb2ludGVyIGRvZXNuJiMzOTt0IGdldCBtb2RpZmllZCBieSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYW5kIGluZGVlZCwgdGhhdCBmdW5jdGlvbiB0b3VjaGVzIGBhdmMtJmd0O3ZtYWAgYW5kIGBhdmMtJmd0O2Fub25fdm1hYCwgbm90IHRoZSBzb3VyY2UuICBXYWl0LCBpZiBgc3JjID09IGRzdGAsIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgd291bGQgY3JlYXRlIGFuIGluZmluaXRlIGxvb3AsIHNvIHRoZSBjb21waWxlciB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGlzLCBidXQgdGhlIGZ1bmN0aW9uIHdvdWxkIGJlIHZlcnkgcHJvYmxlbWF0aWMuICBTbyBgc3JjYCBjYW5ub3QgYmUgZXF1YWwgdG8gYGRzdGAuCgpJIHdhcyBhbHNvIGFza2luZyBteXNlbGYgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNhbiBiZSBtb2RpZmllZCBlbHNld2hlcmUgaW4gYGFub25fdm1hX2Nsb25lYC4gIEl0IHNlZW1zIG5vLiBUaGUgY29tcGlsZXIgcmVsb2FkcyBtaWdodCBiZSBhIHByb2JsZW0sIGJ1dCBpdCYjMzk7cyBub3QuIFRoZW4sIGl0IGhpdHMgbWUgdGhhdCBgZHVwX2Fub25fdm1hYCBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiBCdXQsIGhlcmUgYHNyY2AgYW5kIGBkc3RgIGFyZSBkaWZmZXJlbnQuIEFsc28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBzcmNgIGlzIGZyZWVkLCBidXQgd2UgYXJlIGhvbGRpbmcgdGhlIG1tYXAgbG9jay4KClNvIHRoZSBtYWluIHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZCBjb25jdXJyZW50bHkuIFRoZSBjb2RlIGNvbW1lbnRzIGluIGBhbm9uX3ZtYV9jbG9uZWAgdGFsayBhYm91dCB0aGUgbW1hcCBsb2NrLiBJdCBzYXlzICYjMzQ7RWl0aGVyIHNyYywgZHN0IGhhdmUgdGhlIHNhbWUgbW0gZm9yIHdoaWNoIHdlIGhvbGQgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayYjMzQ7LiBUaGlzIHNlZW1zIHByZXR0eSBkZWZpbml0aXZlLiAgV2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrLCBubyBvdGhlciB0aHJlYWQgc2hvdWxkIGJlIGFibGUgdG8gdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGF0IGxvY2sgaXMgaGVsZCBkdXJpbmcgYFZNQV9PUF9TUExJVGAgYW5kIGluIGBfX3NwbGl0X3ZtYWAsIHNvIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBwcm9ibGVtLgoKTm93LCBJIHdhcyB0aGlua2luZyBhYm91dCBgcGFnZV9mYXVsdGAuIGBwYWdlX2ZhdWx0YCB1c2VzIHRoZSBtbWFwIHJlYWQgbG9jay4gSWYgd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrLCBgcGFnZV9mYXVsdGAgY2FuJiMzOTt0IHJ1biBjb25jdXJyZW50bHkuIEJ1dCwgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjb25maXJtcyB0aGF0IHRoZSB3cml0ZSBsb2NrIGlzIEFMV0FZUyBoZWxkLCBzbyBvdGhlciB0aHJlYWRzIGNhbm5vdCBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBJdCBpcyBqdXN0IGEgYHZvaWRgIHRoYXQgb25seSBkb2VzIGEgYFZNX1dBUk5fT05fT05DRWAuCgpXYWl0LCBjb3VsZCBzb21ldGhpbmcgZWxzZSBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBOby4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhbHdheXMgaW4gYGRzdC0mZ3Q7YW5vbl92bWFgLiBUaGUgbWFpbiBxdWVzdGlvbiBpcyB0aGF0IHRoZSBsb2NrIGlzIGhlbGQsIHNvIGl0IHNob3VsZCBiZSBmaW5lLiAgTm93LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGlzLgoKQnV0IHRoZW4gSSByZWFsaXplLiBXYWl0ISBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXM6IGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIGFzIGBzcmMtJmd0O2Fub25fdm1hYCBpbiB0aGUgZnVuY3Rpb24uCgpTbywgdW5sZXNzIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4gY2hhbmdlLCB0aGlzIGRvZXNuJiMzOTt0IG1hdHRlci4gVGhlIG5leHQgdGhpbmcgSSByZWFsaXplZCBpcyB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBjb3VsZCBoYXZlIGEgcHJvYmxlbSBpZiBhbm90aGVyIHRocmVhZCBpcyBtb2RpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHRoZSBsb29wLgoKVGhlIHNvbHV0aW9uIGlzIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCwgbm93IEkmIzM5O20gdGhpbmtpbmcgd2hldGhlciBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHBlci1WTUEgbG9jayEgIEl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgcGFnZSBmYXVsdHMsIHVzaW5nIHRoZSBwZXItVk1BIGxvY2ssIGNhbiBtb2RpZnkgYSBgdm1hLSZndDthbm9uX3ZtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjExLVx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xubW0vcm1hcC5jOjIxMjpcdFx0dm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG5tbS9ybWFwLmMtMjEzLVx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTM4OC1cdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSYjMzk7bGwgcmV1c2UgZXhpc3Rpbmcgb3IgYWxsb2NhdGUgbmV3LiAqL1xubW0vcm1hcC5jOjM4OTpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtMzkwLVxuLS1cbm1tL3JtYXAuYy00MzItXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXG5tbS9ybWFwLmM6NDMzOlx0dm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG5tbS9ybWFwLmMtNDM0LVx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTQ1Mj1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00NjUtXHQgKi9cbm1tL3JtYXAuYzo0NjY6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTQ2Ny19XG4tLVxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTUyMS1cdCAqL1xubW0vcm1hcC5jOjUyMjpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtNTIzLVx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mzg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBWTUEgTG9ja2luZyoqCgpPa2F5LCB3YWl0IGEgbWludXRlLiBMb29raW5nIGF0IHRoaXMgY29kZSwgYF9fYW5vbl92bWFfcHJlcGFyZWAgY2xlYXJseSBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYHZtYS0mZ3Q7YW5vbl92bWFgIHN0cnVjdHVyZS4gVGhhdOKAmXMgYSBrZXkgcGllY2UuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCB0aGUgb25lIHRoYXQgcmVhbGx5IG1hdHRlcnMgZm9yIHN0YWJpbGl0eSBhbmQgY29uY3VycmVuY3kgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24sIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBpcyBvcGVyYXRpbmcgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgdGhlIHBlci1WTUEgbG9jay4gSWYgaXQmIzM5O3Mgbm90LCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gdGhhdCBuZWVkcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpdHNlbGYgdG8gY29uZmlybSB3aGV0aGVyIHRoZSByaWdodCBsb2NrcyBhcmUgYmVpbmcgaGVsZCB3aGVuIGl0IG1vZGlmaWVzIHRoZSBgdm1hLSZndDthbm9uX3ZtYWAuIEkmIzM5O2xsIHZlcmlmeSB0aGlzIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTI2MD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKTtcbm1tL2ludGVybmFsLmg6MjYxOmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2ludGVybmFsLmgtMjYyLXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vaW50ZXJuYWwuaD0yNjQ9c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTI2OC1cbm1tL2ludGVybmFsLmg6MjY5Olx0cmV0dXJuIF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xubW0vaW50ZXJuYWwuaC0yNzAtfVxuLS1cbm1tL21lbW9yeS5jPTM3OTM9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zODEwLSAqIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBwZXItVk1BIGxvY2ssIHRoZSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZVxubW0vbWVtb3J5LmM6MzgxMTogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG5tbS9tZW1vcnkuYy0zODEyLSAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCYjMzk7cyBub3Qgc2FmZSB0b1xuLS1cbm1tL21lbW9yeS5jPTM4MTg9dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzgyOC1cdH1cbm1tL21lbW9yeS5jOjM4Mjk6XHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXG5tbS9tZW1vcnkuYy0zODMwLVx0XHRyZXQgPSBWTV9GQVVMVF9PT007XG4tLVxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTE1OS0vKipcbm1tL3JtYXAuYzoxNjA6ICogX19hbm9uX3ZtYV9wcmVwYXJlIC0gYXR0YWNoIGFuIGFub25fdm1hIHRvIGEgbWVtb3J5IHJlZ2lvblxubW0vcm1hcC5jLTE2MS0gKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvblxuLS1cbm1tL3JtYXAuYy0xODQtICovXG5tbS9ybWFwLmM6MTg1OmludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9ybWFwLmMtMTg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fdm1mX2Fub25fcHJlcGFyZWAgZnVuY3Rpb24sIGFuZCB0aGUgY29tbWVudCBpcyBpbW1lZGlhdGVseSB0aHJvd2luZyB1cCBhIGZsYWcuIEl0IHNheXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpvbmx5KiBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBsb2Nrcy4gSXQgYWxzbyBzYXlzIHRoYXQgYSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZSBgbW1hcF9sb2NrYCBoZWxkLiBXaHk/IEFoLCBpdCYjMzk7cyBiZWNhdXNlIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgd2l0aGluIHRoaXMgZnVuY3Rpb24gY2hlY2tzICphZGphY2VudCogVk1BcyB0byBzZWUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBgYW5vbl92bWFgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgdHJ5aW5nIHRvIGxvb2sgYXQgbmVpZ2hib3JpbmcgbWVtb3J5IHJlZ2lvbnMgd2hpbGUgaG9sZGluZyBvbmx5IGEgcGVyLVZNQSBsb2NrLiBJdCYjMzk7cyBub3Qgc2FmZS4KClNvLCBpZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyB1bnNhZmUgdG8gY2FsbCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrLCBkb2VzIGB2bWZfYW5vbl9wcmVwYXJlYCB0aGVuIHJldHVybiBgVk1fRkFVTFRfUkVUUllgIGlmIGNhbGxlZCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrPyBJdCBzZWVtcyBsaWtlbHkuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODEwOlx0ICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXG4zODExOlx0ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xuMzgxMjpcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCYjMzk7cyBub3Qgc2FmZSB0b1xuMzgxMzpcdCAqIGRvIHdpdGggb25seSB0aGUgcGVyLVZNQSBsb2NrIGhlbGQgZm9yIHRoaXMgVk1BLlxuMzgxNDpcdCAqXG4zODE1Olx0ICogUmV0dXJuOiAwIGlmIGZhdWx0IGhhbmRsaW5nIGNhbiBwcm9jZWVkLiAgQW55IG90aGVyIHZhbHVlIHNob3VsZCBiZVxuMzgxNjpcdCAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuXG4zODE3Olx0ICovXG4zODE4Olx0dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4zODE5Olx0e1xuMzgyMDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuMzgyMTpcdFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuMzgyMjpcdFxuMzgyMzpcdFx0aWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKVxuMzgyNDpcdFx0XHRyZXR1cm4gMDtcbjM4MjU6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4MjY6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzgyNzpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4Mjg6XHRcdH1cbjM4Mjk6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4MzA6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzgzMTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4MzI6XHRcdFx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuMzgzMzpcdFx0cmV0dXJuIHJldDtcbjM4MzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGFub25fdm1hX2Nsb25lYCBhbmQgUG90ZW50aWFsIERhdGEgUmFjZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byBgc3JjLSZndDthbm9uX3ZtYWAuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBfX3ZtZl9hbm9uX3ByZXBhcmVgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jaywgaW1wbHlpbmcgdGhhdCBgdm1hLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IG1vZGlmaWVkIHVuZGVyIGp1c3QgdGhlIHBlci1WTUEgbG9jay4gVGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLCBzdWdnZXN0aW5nIHRoYXQgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWAgY29uY3VycmVudGx5LgoKQnV0IHdhaXQsIHdoeSB3YXMgYHNyYy0mZ3Q7YW5vbl92bWFgIGNoYW5nZWQgdG8gYGFjdGl2ZV9hbm9uX3ZtYWA/IExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoOiBgc3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtJmd0O2Fub25fdm1hO2AuIEhtbSwgd2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgTlVMTD8gVGhlIGNoZWNrIGBpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkgcmV0dXJuIDA7YCBoYW5kbGVzIHRoYXQgY2FzZSBlYXJseS4gU28sIGF0IGxlYXN0IGluaXRpYWxseSwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBOVUxMLgoKQ291bGQgc29tZXRoaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgIGl0c2VsZiBhbHRlciBgc3JjLSZndDthbm9uX3ZtYWA/IFRoZSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uIHNlZW1zIGlubm9jdW91cywganVzdCBhIGJ1bmNoIG9mIGBWTV9XQVJOX09OX09OQ0VgIGNhbGxzLiBJdCBjYW4mIzM5O3QgY2hhbmdlIGl0LiBUaGVuIHdoYXQgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmA/IENvdWxkIHRoYXQgbW9kaWZ5IGBzcmMtJmd0O2Fub25fdm1hYD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQgb3BlcmF0ZXMgb24gYGRzdC0mZ3Q7YW5vbl92bWFfY2hhaW5gLCBub3QgYHNyYy0mZ3Q7YW5vbl92bWFgLiBJdCBpcyBsb29raW5nIGF0IHRoZSBjaGFpbiB3aXRoaW4gYHNyY2AsIGJ1dCB0aGF0IGlzIGEgY2hhaW4gb2YgYGFub25fdm1hYCBvYmplY3RzLgoKSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHNyY2AgY291bGQgYmUgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYSBsb29wIG1pZ2h0IGhhcHBlbiB3aXRoIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBgZHVwX2Fub25fdm1hYCBmdW5jdGlvbiBzZXRzIGBkc3QtJmd0O2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYWAgYmVmb3JlIGNhbGxpbmcgYGFub25fdm1hX2Nsb25lYCwgc28gdGhlIGxvY2sgd291bGQgcHJldmVudCBhbnkgaXNzdWVzLiBMb29raW5nIGluc2lkZSBgYW5vbl92bWFfY2xvbmVgJiMzOTtzLCBhZnRlciB0aGUgY2xvbmUsIGBkc3QtJmd0O2Fub25fdm1hLSZndDtudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7YCBpcyBleGVjdXRlZC4gSW4gdGhpcyBjYXNlLCBgc3JjLSZndDthbm9uX3ZtYWAmIzM5O3MgYG51bV9hY3RpdmVfdm1hc2AgaXMgbW9kaWZpZWQgYW5kIHRoaXMgY291bGQgZ2l2ZSBhIGZhbHNlIHNlbnNlIG9mIGEgZGF0YSByYWNlLiBIb3dldmVyLCB0aGlzIG9ubHkgbW9kaWZpZXMgYSB2YWx1ZSwgbm90IHRoZSBwb2ludGVyIGl0c2VsZi4KClRoZW4gdGhlIGtleSBxdWVzdGlvbjogQ291bGQgYSBLQ1NBTiBjb21wbGFpbnQgYmUgZHVlIHRvIGFub3RoZXIgdGhyZWFkIHJlYWRpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgPyBSZW1lbWJlciwgYGFub25fdm1hX2Nsb25lYCByZWFkcyBgc3JjLSZndDthbm9uX3ZtYWAgdHdpY2UuIEhvd2V2ZXIsIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0byBgc3JjLSZndDthbm9uX3ZtYWAgc2luY2Ugd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrISBUaGUgYGFub25fdm1hX2ZvcmtgIGZ1bmN0aW9uIGRvZXMgY2FsbCBgYW5vbl92bWFfY2xvbmVgLCBob3dldmVyIHRoZSBgc3JjYCBWTUEgaXMgbG9ja2VkLiBTbyB0aGUgcGFyZW50IGNhbm5vdCBtb2RpZnkgaXQuCgpTbywgaW4gdGhlb3J5LCBpZiBhIGRpZmZlcmVudCB0aHJlYWQgaXMgcmVhZGluZyBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aG91dCBhIGxvY2ssIHRoZXJlIG1pZ2h0IGJlIGEgZGF0YSByYWNlLiBCdXQsIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYW5kIHRoZSBwYXJlbnQgaXMgYWxzbyBsb2NrZWQuIFNvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCgpMZXQgbWUgc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UuIEFoYSEgVGhlIGNvbW1pdCBgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5Y2AgY2hhbmdlcyB0aGUgbG9jay4gV2h5IHdhcyB0aGF0IG5lZWRlZD8gTGV0JiMzOTtzIGxvb2sgYWdhaW46CmBgYGMKCXN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYTsKLi4uCglhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CmBgYAoKV2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgTlVMTCBhdCB0aGUgdGltZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWA/CkhvdyBjb3VsZCBpdCBiZSBOVUxMPwpJZiBgc3JjYCBpcyBgZHN0YD8gTm8uCklmIGBzcmNgIGlzIG1vZGlmaWVkPwoKTG9va2luZyBhdCBjYWxscyB0byBgYW5vbl92bWFfY2xvbmVgLCB0aGUgYHNyY2AgYW5kIGBkc3RgIHZtX2FyZWFzIGFyZSBhbHdheXMgZGlmZmVyZW50LgpTbyBgc3JjYCBuZXZlciBjaGFuZ2VzLiBUaHVzLCBgc3JjLSZndDthbm9uX3ZtYWAgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkLiBBbmQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbiAzMjE6XHRcdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAzMjI6XHR7XG4gMzIzOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XG4gMzI0Olx0XHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbiAzMjU6XHRcbiAzMjY6XHRcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKCFhY3RpdmVfYW5vbl92bWEpXG4gMzI5Olx0XHRcdHJldHVybiAwO1xuIDMzMDpcdFxuIDMzMTpcdFx0LypcbiAzMzI6XHRcdCAqIEFsbG9jYXRlIEFWQ3MuIFdlIGRvbiYjMzk7dCBuZWVkIGFuIGFub25fdm1hIGxvY2sgZm9yIHRoaXMgYXMgd2VcbiAzMzM6XHRcdCAqIGFyZSBub3QgdXBkYXRpbmcgdGhlIGFub25fdm1hIHJidHJlZSBub3IgYXJlIHdlIGNoYW5naW5nXG4gMzM0Olx0XHQgKiBhbm9uX3ZtYSBzdGF0aXN0aWNzLlxuIDMzNTpcdFx0ICpcbiAzMzY6XHRcdCAqIEVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwXG4gMzM3Olx0XHQgKiB3cml0ZSBsb2NrLCBvciB3ZSBhcmUgZm9ya2luZyBhbmQgd2UgaG9sZCBpdCBvbiBzcmMtXHUwMDNldm1fbW0gYW5kIGRzdCBpc1xuIDMzODpcdFx0ICogbm90IHlldCBhY2Nlc3NpYmxlIHRvIG90aGVyIHRocmVhZHMgc28gdGhlcmUmIzM5O3Mgbm8gcG9zc2libGlpdHkgb2YgdGhlXG4gMzM5Olx0XHQgKiB1bmxpbmtlZCBBVkMmIzM5O3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxuIDM0MDpcdFx0ICovXG4gMzQxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiAzNDI6XHRcdFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XG4gMzQzOlx0XHRcdGlmICghYXZjKVxuIDM0NDpcdFx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cdTAwM2Vhbm9uX3ZtYSk7XG4gMzQ3Olx0XHR9XG4gMzQ4Olx0XG4gMzQ5Olx0XHQvKlxuIDM1MDpcdFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJiMzOTtzIGJhY2sgdG8gdGhlIG5ld2x5IGluc2VydGVkIEFWQ3MuXG4gMzUxOlx0XHQgKiBOb3RlIHRoYXQgYWxsIGFub25fdm1hJiMzOTtzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXG4gMzUyOlx0XHQgKi9cbiAzNTM6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiAzNTQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiAzNTU6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiAzNTY6XHRcbiAzNTc6XHRcdFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyYl9yb290KTtcbiAzNTg6XHRcdFx0aWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylcbiAzNTk6XHRcdFx0XHRtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKTtcbiAzNjA6XHRcdH1cbiAzNjE6XHRcbiAzNjI6XHRcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXG4gMzYzOlx0XHRcdGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuIDM2NDpcdFxuIDM2NTpcdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzY2Olx0XHRyZXR1cm4gMDtcbiAzNjc6XHRcbiAzNjg6XHQgZW5vbWVtX2ZhaWx1cmU6XG4gMzY5Olx0XHRjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1c3BlY3RlZCBEYXRhIFJhY2UqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBwYXRjaCBjaGFuZ2VkIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgdGhlIHNhbWUgYXMgYHNyYy0mZ3Q7YW5vbl92bWFgLiBTbywgd2h5IHRoZSBjaGFuZ2U/CgpGaXJzdCwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBvYnZpb3VzLiBDb3VsZCBgc3JjLSZndDthbm9uX3ZtYWAgYmUgbW9kaWZpZWQgZGlyZWN0bHkgYnkgc29tZSBvdGhlciBmdW5jdGlvbiBsaWtlIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hc2AsIG9yIGBhbm9uX3ZtYV9jaGFpbl9hbGxvY2A/IE5vLCB0aG9zZSBkb24mIzM5O3QgdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLgoKTm93LCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2UgY29uZGl0aW9uIGtlZXBzIHBvcHBpbmcgaW50byBteSBoZWFkLiBJcyBpdCBwb3NzaWJsZSBhIGNvbmN1cnJlbnQgdGhyZWFkIGNvdWxkIG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWA/IE5vLCB3YWl0ISBJJiMzOTt2ZSBiZWVuIHRocm91Z2ggdGhpcyBiZWZvcmUuIFdlICpzaG91bGQqIGJlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAsIHdoaWNoIHdvdWxkIHByZXZlbnQgYW55IG90aGVyIHRocmVhZCBmcm9tIG1vZGlmeWluZyBpdCBjb25jdXJyZW50bHkuCgpCdXQuLi4gaGFuZyBvbi4gVGhlIGNvbW1lbnQgaGVyZS4uLiBzYXlzIHNvbWV0aGluZyBhYm91dCBhbGxvY2F0aW5nIEFWQ3MuIEl0IHN0YXRlcywgYW5kIEkgcXVvdGUsICYjMzQ7V2UgZG9uJiMzOTt0IG5lZWQgYW4gYW5vbl92bWEgbG9jayBmb3IgdGhpcyBhcyB3ZSBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZyBhbm9uX3ZtYSBzdGF0aXN0aWNzLiYjMzQ7IE9rYXksIHNvIHRoZSBsb2NrIGlzbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZWQqIGZvciBBVkMgYWxsb2NhdGlvbiBpdHNlbGYuIFRoZSBjb21tZW50IHRoZW4gc3RhdGVzIGVpdGhlciBgc3JjYCwgYGRzdGAgaGF2ZSB0aGUgc2FtZSBtbSB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIG9yIGlmIGZvcmtpbmcsIHdlIGhvbGQgaXQgb24gYHNyYy0mZ3Q7dm1fbW1gLgoKU28sIGluICphbGwqIGNhc2VzIOKAkyB3aGV0aGVyIGl0JiMzOTtzIHRoZSBzYW1lIG1lbW9yeSBtYXAgb3Igd2UgYXJlIGZvcmtpbmcg4oCTIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoYXQgbW1hcCB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYC4gU28sIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB0b3VjaCBgc3JjLSZndDthbm9uX3ZtYWAhCgpUaGVuIHdoeSB0aGUgY2hhbmdlPyBJcyB0aGlzIGEgS0NTQU4gZGF0YSByYWNlIGRldGVjdGlvbiB0aGluZz8gS0NTQU4gcGlja3MgdXAgYSByYWNlIHdoZW4gdGhlcmUgaXMgYSBjb25jdXJyZW50IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbiwgYnV0IHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYSBjb25jdXJyZW50IHdyaXRlIGhlcmUhIFRoZSB3cml0ZSBsb2NrICpzaG91bGQqIGd1YXJhbnRlZSB0aGF0LgoKT2theSwgbGV0IG1lIHRoaW5rLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyB3cml0dGVuIGJ5IGEgdGhyZWFkIHRoYXQgZG9lcyAqbm90KiBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2s/IFRoaXMgbWFrZXMgbWUgdGhpbmsgLSBpcyB0aGVyZSBhbnkgY29kZSBpbiB0aGUgY29kZWJhc2UgdGhhdCB3cml0ZXMgdG8gYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGhvdXQgaG9sZGluZyB0aGF0IHdyaXRlIGxvY2s/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGFzc2lnbm1lbnRzIGxpa2UgYHZtYS0mZ3Q7YW5vbl92bWEgPWAgYW5kIHRoZW4gcmV2aWV3IHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSB3cml0ZXMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWEtXHUwMDNlYW5vbl92bWEgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIxMS1cdGlmIChsaWtlbHkoIXZtYS1cdTAwM2Vhbm9uX3ZtYSkpIHtcbm1tL3JtYXAuYzoyMTI6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jLTIxMy1cdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy0zODgtXHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbm1tL3JtYXAuYzozODk6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTM5MC1cbi0tXG5tbS9ybWFwLmMtNDMyLVx0LyogTWFyayB0aGlzIGFub25fdm1hIGFzIHRoZSBvbmUgd2hlcmUgb3VyIG5ldyAoQ09XZWQpIHBhZ2VzIGdvLiAqL1xubW0vcm1hcC5jOjQzMzpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jLTQzNC1cdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuLS1cbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNDY1LVx0ICovXG5tbS9ybWFwLmM6NDY2Olx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy00NjctfVxuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy01MjEtXHQgKi9cbm1tL3JtYXAuYzo1MjI6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTUyMy1cdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmN1cnJlbmN5IENvbmNlcm5zIGluIEFub255bW91cyBWTSBBcmVhIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIHRoYXQgYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgZnJvbSBgdm1mX2Fub25fcHJlcGFyZWAuIEhtbSwgaW50ZXJlc3RpbmcuIEFuZCBgdm1mX2Fub25fcHJlcGFyZWAsIGZyb20gd2hhdCBJIHJlbWVtYmVyLCBnZXRzIHRyaWdnZXJlZCBkdXJpbmcgYSBwYWdlIGZhdWx0LCByaWdodD8gVGhhdCYjMzk7cyB3aGVuIHRoZSBrZXJuZWwgaXMgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgcGh5c2ljYWwgcGFnZSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIOKAkyBkdXJpbmcgYSBwYWdlIGZhdWx0LCB3ZSYjMzk7cmUgaG9sZGluZyB0aGUgbW1hcCBSRUFEIGxvY2suCgoqV2FpdCBhIG1pbnV0ZSEqIElmIHRoZSBtbWFwIFJFQUQgbG9jayBpcyBoZWxkLCB0aGF0IG1lYW5zIG11bHRpcGxlIHRocmVhZHMgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBleGVjdXRpbmcgYF9fYW5vbl92bWFfcHJlcGFyZWAgY29uY3VycmVudGx5ISBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHJhY2UgY29uZGl0aW9ucyBpZiB3ZSBhcmUgbm90IGNhcmVmdWwsIGFuZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgcmVjaXBlIGZvciBkaXNhc3Rlci4gSSBoYWQgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYW5vbl92bWFfcHJlcGFyZWAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHRocmVhZC1zYWZlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgY29uY3VycmVudCBhY2Nlc3MgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBhbm9ueW1vdXMgbWVtb3J5IHJlZ2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODU6XHRpbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIDE4ODpcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSwgKmFsbG9jYXRlZDtcbiAxODk6XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xuIDE5MDpcdFxuIDE5MTpcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbiAxOTI6XHRcdG1pZ2h0X3NsZWVwKCk7XG4gMTkzOlx0XG4gMTk0Olx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcbiAxOTU6XHRcdGlmICghYXZjKVxuIDE5NjpcdFx0XHRnb3RvIG91dF9lbm9tZW07XG4gMTk3Olx0XG4gMTk4Olx0XHRhbm9uX3ZtYSA9IGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHZtYSk7XG4gMTk5Olx0XHRhbGxvY2F0ZWQgPSBOVUxMO1xuIDIwMDpcdFx0aWYgKCFhbm9uX3ZtYSkge1xuIDIwMTpcdFx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMjAyOlx0XHRcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxuIDIwMzpcdFx0XHRcdGdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YztcbiAyMDQ6XHRcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2NoaWxkcmVuJiM0MzsmIzQzOzsgLyogc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi9cbiAyMDU6XHRcdFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XG4gMjA2Olx0XHR9XG4gMjA3Olx0XG4gMjA4Olx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbiAyMDk6XHRcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xuIDIxMDpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gMjExOlx0XHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG4gMjEyOlx0XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xuIDIxMzpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiAyMTQ6XHRcdFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyYl9yb290KTtcbiAyMTU6XHRcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAyMTY6XHRcdFx0YWxsb2NhdGVkID0gTlVMTDtcbiAyMTc6XHRcdFx0YXZjID0gTlVMTDtcbiAyMTg6XHRcdH1cbiAyMTk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbnVuZHJ1bSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIHRoZSBjb2RlIG1ha2VzIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGB2bWEtJmd0O2Fub25fdm1hYCB3aGlsZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jay4gQW5kIGl0JiMzOTtzIHVzaW5nIGBzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKWAgdG8gbWFrZSBzdXJlIG90aGVyIHRocmVhZHMgZG9uJiMzOTt0IG1lc3Mgd2l0aCBgdm1hLSZndDthbm9uX3ZtYWAgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGFub3RoZXIgdGhyZWFkIGhhbmRsaW5nIGEgcGFnZSBmYXVsdCAqY291bGQqIGJlIGNoYW5naW5nIGB2bWEtJmd0O2Fub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBUaGF0JiMzOTtzIHdoYXQgdGhlIGxvY2tpbmcgc3VnZ2VzdHMuCgpCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgYW5vbl92bWFfY2xvbmVgIGhhcyB0aGlzIGBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLSZndDt2bV9tbSlgIGFzc2VydGlvbi4gSXQgKnJlcXVpcmVzKiB0aGUgbW1hcCBXUklURSBsb2NrLiBJZiB0aGF0IGxvY2sgaXMgaGVsZCwgdGhlbiBieSBkZWZpbml0aW9uLCAqbm8qIG90aGVyIHRocmVhZCBjYW4gYmUgaG9sZGluZyB0aGUgbW1hcCBSRUFEIGxvY2sgc2ltdWx0YW5lb3VzbHkuCgpUaGVyZWZvcmUsIGlmIGBhbm9uX3ZtYV9jbG9uZWAgaXMgZXhlY3V0aW5nLCBpdCBzZWVtcyBpbXBvc3NpYmxlIGZvciBgX19hbm9uX3ZtYV9wcmVwYXJlYCB0byBiZSBydW5uaW5nIGNvbmN1cnJlbnRseSEgQW5kIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4mIzM5O3QgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGVzZSB0d28gc2VlbWluZ2x5IGNvbmZsaWN0aW5nIG9ic2VydmF0aW9ucyBqdXN0IGRvbiYjMzk7dCBhZGQgdXAhCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGVkZ2UgY2FzZSwgb3Igc29tZSBvdGhlciBjb2RlIHBhdGgsIHdoZXJlIGBhbm9uX3ZtYV9jbG9uZWAgZ2V0cyBjYWxsZWQgKndpdGhvdXQqIHRoZSB3cml0ZSBsb2NrIGhlbGQuIE1heWJlIHNvbWV0aGluZyBpbiBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGNhbiByZXNvbHZlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbm9uX3ZtYWAgTG9ja2luZyBpbiBgZHVwX2Fub25fdm1hYCBhbmQgYGFub25fdm1hX2Nsb25lYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy0mZ3Q7dm1fbW0pO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiB0aGUgc291cmNlIFZNQSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUgKGBzcmMtJmd0O3ZtX21tYCkuIFRoaXMgaXMga2V5LiBJdCBtZWFucyB0aGF0LCBpbiBwcmluY2lwbGUsIGBzcmMtJmd0O2Fub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLiAKClRoZSBxdWVzdGlvbiBpcywgd2h5IHdhcyB0aGVyZSBhIGNoYW5nZSBmcm9tIGxvY2tpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIGRpcmVjdGx5IHRvIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgLCB3aGljaCBpcyBpbml0aWFsaXplZCBhcyBgc3JjLSZndDthbm9uX3ZtYWA/IElmIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4mIzM5O3QgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LCB0aGVuIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgIHNob3VsZCBiZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsLgoKTXkgbGluZSBvZiByZWFzb25pbmcgaXMsICppZiogYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBjaGFuZ2luZyBiZXR3ZWVuIHdoZW4gaXQmIzM5O3MgcmVhZCB0byBpbml0aWFsaXplIGBhY3RpdmVfYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBjYWxsZWQsIHRoZW4gdGhlcmUmIzM5O3Mgbm8gcHJvYmxlbS4gSSYjMzk7bSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gIG9wZXJhdGVzIG9uIHRoZSBkZXN0aW5hdGlvbiYjMzk7cyBjaGFpbi4gYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIHNvdXJjZSYjMzk7cyBgYW5vbl92bWFgLiBUaGUgc2FtZSBnb2VzIGZvciBgbWF5YmVfcmV1c2VfYW5vbl92bWFgLgoKVGhlbiwgSSBicmllZmx5IGNvbnNpZGVyZWQgYW4gYWxpYXMgc2l0dWF0aW9uOyBpZiBgc3JjYCBhbmQgYGRzdGAgd2VyZSB0aGUgc2FtZSwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgKmRpZCogcG90ZW50aWFsbHkgbW9kaWZ5IGBkc3QtJmd0O2Fub25fdm1hYCwgdGhlbiBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIEJ1dCBJJiMzOTttIHF1aWNrbHkgZGlzbWlzc2luZyB0aGlzIHNpbmNlIGl0JiMzOTtzIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCBgc3JjYCBhbmQgYGRzdGAgYXJlICphbHdheXMqIGRpZmZlcmVudC4gQWxzbywgSSYjMzk7bSBjaGVja2luZyB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBub3QgYSBtYWNybyBhbmQgaXMgYSBmaWVsZCB3aXRoaW4gYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAuCgpUaGVuLCBJIGJyaWVmbHkgY29uc2lkZXIgYSBjb21waWxlciBpc3N1ZTsgSSYjMzk7bSBlbGltaW5hdGluZyB0aGUgcG9zc2liaWxpdHkgb2YgYSBkYXRhIHJhY2UgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHJlYWQgdHdpY2UgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIHRoZSB2YWx1ZS4gS0NTQU4gd291bGRuJiMzOTt0IGZsYWcgYSByYWNlIGlmIG5vIGNvbmN1cnJlbnQgd3JpdGVyIGV4aXN0cy4gU2luY2UgdGhlIHdyaXRlIGxvY2sgaXMgaGVsZCwgdGhlcmUmIzM5O3Mgbm8gY29uY3VycmVudCB3cml0ZXIuIFNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgYHNyY2AgaXMgaW4gYSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgbW1gKS4gVGhlbiwgdGhlIGFuYWx5c2lzIGlzIGFib3V0IGBhbm9uX3ZtYV9mb3JrYCBhbmQgd2hldGhlciBhIHBhcmVudCYjMzk7cyBWTUEgY291bGQgYmUgbW9kaWZpZWQgYnkgYSBjaGlsZC4gVGhpcyBpcyBhbHNvIGltcG9zc2libGUgYmVjYXVzZSBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQmIzM5O3MgYG1tYC4KClRoZW4sIEkmIzM5O20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBgYW5vbl92bWFfbG9ja193cml0ZWAgYW5kIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGVgLiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgb25seSB0YWtlIHRoZSBwb2ludGVyIHRvIGBzdHJ1Y3QgYW5vbl92bWFgIGFuZCBkb24mIzM5O3QgbW9kaWZ5IHRoZSBwb2ludGVyIGl0c2VsZi4gVGhlcmVmb3JlLCB0aGV5IGNhbiYjMzk7dCBjaGFuZ2Ugd2hhdCBgc3JjLSZndDthbm9uX3ZtYWAgKnBvaW50cyB0byouCgpPa2F5LCBzbyBJIHdlbnQgYmFjayB0byB0aGUgcGF0Y2ggYW5kIEkgcmVhbGl6ZWQgdGhlcmUmIzM5O3MgYSBwcm9ibGVtOiB0aGUgKm9yaWdpbmFsKiBjb2RlIGxvY2tlZCBgc3JjLSZndDthbm9uX3ZtYWAgYW5kIHVubG9ja2VkIGBhY3RpdmVfYW5vbl92bWFgLiBUaGUgcmVmYWN0b3JpbmcgaW5pdGlhbGl6ZXMgYGFjdGl2ZV9hbm9uX3ZtYWAgZnJvbSBgc3JjLSZndDthbm9uX3ZtYWAuIE5vdyBpdCAqc2hvdWxkbiYjMzk7dCBtYXR0ZXIqIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyAqZGlmZmVyZW50KiBmcm9tIGBhY3RpdmVfYW5vbl92bWFgLiBCdXQgaG93IGNvdWxkIHRoZXkgYmUgZGlmZmVyZW50PyBJJiMzOTttIHJlY2hlY2tpbmcgdGhlIGNvZGUgaW4gYGR1cF9hbm9uX3ZtYWAuCgpgZHVwX2Fub25fdm1hYCBzZXRzIGBkc3QtJmd0O2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYWAgYW5kIHRoZW4gY2FsbHMgYGFub25fdm1hX2Nsb25lYC4gKkluc2lkZSogYGFub25fdm1hX2Nsb25lYCwgdGhlIGNvZGUgdGhlbiBnZXRzIGEgbG9jYWwgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5pdGlhbGl6ZWQgd2l0aCBgc3JjLSZndDthbm9uX3ZtYWAgKHdoaWNoIGlzIGBkc3QtJmd0O2Fub25fdm1hYCkuIFRoZW4gdGhlIGNvZGUgY2FsbHMgYGFub25fdm1hX2Nsb25lYCB3aGljaCAqZG9lcyogYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCAtIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYGRzdC0mZ3Q7YW5vbl92bWFgIGlmIGBzcmMgPT0gZHN0YC4gSW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlcmUmIzM5O3MgYWxzbyB0aGUgbGluZSBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2Agd2hpY2ggKmRvZXMqIG1vZGlmeSBgZHN0LSZndDthbm9uX3ZtYWAuIFNvIHRoaXMgbWVhbnMgdGhhdCBpZiBgc3JjYCBpcyBhbiBhbGlhcyBmb3IgYGRzdGAsIHRoZW4gYHNyYy0mZ3Q7YW5vbl92bWFgIGdldHMgbW9kaWZpZWQuCgpCdXQgSSBrZWVwIHRoaW5raW5nIHRoYXQgSSBlc3RhYmxpc2hlZCBlYXJsaWVyIHRoYXQgdGhleSBhcmUgKmFsd2F5cyogZGlmZmVyZW50Li4uIFVubGVzcy4uLiAqdW5sZXNzKiB0aGUgc2FtZSBWTUEgaXMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9jbG9uZWAgYXMgYm90aCBgc3JjYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2Nsb25lXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MjUxPWVudW0gdm1hX29wZXJhdGlvbiB7XG4tLVxubW0vaW50ZXJuYWwuaC0yNTctXG5tbS9pbnRlcm5hbC5oOjI1ODppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vaW50ZXJuYWwuaC0yNTktXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcbi0tXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIzNC1cbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5tbS9ybWFwLmMtMjM2LVx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vcm1hcC5jLTMxOS0gKi9cbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbm1tL3JtYXAuYy0zMjEtXHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4tLVxubW0vcm1hcC5jLTMyNS1cbm1tL3JtYXAuYzozMjY6XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbm1tL3JtYXAuYy0zMjctXG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MDMtXHQgKi9cbm1tL3JtYXAuYzo0MDQ6XHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xubW0vcm1hcC5jLTQwNS1cdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXG4tLVxubW0vcm1hcC5jLTQ0NC0vKlxubW0vcm1hcC5jOjQ0NTogKiBJbiB0aGUgdW5mb3J0dW5hdGUgY2FzZSBvZiBhbm9uX3ZtYV9jbG9uZSgpIGZhaWxpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IHdlXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxuLS1cbm1tL3ZtYS5jPTUwMD1fX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3ZtYS5jLTUzNS1cbm1tL3ZtYS5jOjUzNjpcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xubW0vdm1hLmMtNTM3LVx0aWYgKGVycilcbi0tXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vdm1hLmMtNjMzLVx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYzo2MzQ6XHRcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcbm1tL3ZtYS5jLTYzNS1cdFx0aWYgKHJldClcbi0tXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbi0tXG5tbS92bWEuYy0xOTI5LVx0XHRcdGdvdG8gb3V0X2ZyZWVfdm1hO1xubW0vdm1hLmM6MTkzMDpcdFx0aWYgKGFub25fdm1hX2Nsb25lKG5ld192bWEsIHZtYSwgVk1BX09QX1JFTUFQKSlcbm1tL3ZtYS5jLTE5MzEtXHRcdFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Njk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBgYW5vbl92bWFgIExvY2tpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXMgc3RyYWlnaHRmb3J3YXJkOiBpbiBzZXZlcmFsIGtleSBgdm1hYCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIOKAkyBgYW5vbl92bWFfZm9ya2AsIGBfX3NwbGl0X3ZtYWAsIGBkdXBfYW5vbl92bWFgLCBhbmQgYGNvcHlfdm1hYCDigJMgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBWTUFzIChgc3JjYCBhbmQgYGRzdGAsIG9yIGVxdWl2YWxlbnQpIGFyZSBhbHdheXMgZGlzdGluY3QuIFRoZXJlZm9yZSwgdGhlIHNvdXJjZSYjMzk7cyBgYW5vbl92bWFgIGlzbiYjMzk7dCBkaXJlY3RseSBtb2RpZmllZCBkdXJpbmcgdGhlIGNsb25pbmcgcHJvY2Vzcywgbm9yIGlzIHRoZSBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzYCBtb2RpZmllZCBieSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIHdoaWNoIHNob3VsZCBydWxlIG91dCBkYXRhIHJhY2VzLgoKSG93ZXZlciwgSSBwYXVzZWQsIGNvbnNpZGVyaW5nIHRoZSByb2xlIG9mIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLiBJIHJlbWVtYmVyZWQgdGhhdCBpdCBtb2RpZmllcyB0aGUgYGFub25fdm1hX2NoYWluYCwgYnV0IGNyaXRpY2FsbHksIGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFsdGVyIHRoZSBgdm1hLSZndDthbm9uX3ZtYWAgcG9pbnRlciBpdHNlbGYuIFNvLCB0aGF0IGF2ZW51ZSB3YXMgYSBkZWFkIGVuZC4KCk15IGh5cG90aGVzaXMgd2FzIHRoYXQgSSBjb3VsZCByZW1vdmUgdGhlIGNhbGwgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7YCBiZWNhdXNlIGBzcmMtJmd0O2Fub25fdm1hYCBpcyB0aGUgc2FtZSBhcyBgYWN0aXZlX2Fub25fdm1hYCBidXQgSSBuZWVkZWQgdG8gZmluZCBvdXQgd2h5LgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCB0aGlzIG11c3QgYmUgYSBjb3NtZXRpYyBjaGFuZ2UgdG8gbWFrZSB0aGUgY29kZSBjbGVhbmVyLCBidXQgdGhhdCBkaWQgbm90IGZlZWwgcmlnaHQuIENvdWxkIHRoZSBjaGFuZ2UgYmUgbWVhbnQgdG8gZWxpbWluYXRlIGEgY29tcGlsZXIgd2FybmluZyBvciBhIEtDU0FOIGZhbHNlIHBvc2l0aXZlPyBTaW5jZSBLQ1NBTiBuZWVkcyBhIHdyaXRlIHRvIGRldGVjdCBhIGRhdGEgcmFjZSwgdGhpcyBzZWVtZWQgdW5saWtlbHkuCgpJIHRoZW4gY29uc2lkZXJlZCBwYWdlIGZhdWx0cyBoYW5kbGVkIGJ5IHRoZSBwZXItVk1BIGxvY2sgYW5kIGB2bWZfYW5vbl9wcmVwYXJlYC4gSSByZWFsaXplZCB0aGF0IGB2bWZfYW5vbl9wcmVwYXJlYCAqcmVhZHMqIGB2bWEtJmd0O2Fub25fdm1hYCB3aXRob3V0IHRoZSBtbWFwIGxvY2suIFRoaXMgaXMgYSBjb25jdXJyZW50IFJFQUQsIHdoaWNoIGlzIG5vdCBhIHByb2JsZW0uCgpUaGUga2V5IHRoZW4gYmVjYW1lIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCB3YXMgYmVpbmcgKndyaXR0ZW4qIHRvIGJ5IGFub3RoZXIgdGhyZWFkLiAgSSBxdWlja2x5IGRpc21pc3NlZCB0aGlzLiBJJiMzOTttIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBpbiBtb3N0IG9mIHRoZXNlIHNjZW5hcmlvcy4gVGhlIHBlci1WTUEgbG9jayB3b3VsZG4mIzM5O3Qgd29yayBhcyBgdm1mX2Fub25fcHJlcGFyZWAgbmVlZHMgYSBtbWFwIHJlYWQgbG9jayBwcmlvciB0byBjYWxsaW5nIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBzbyBhZ2Fpbiwgbm8gY29uY3VycmVudCB3cml0ZXMuCgpJIHRoZW4gY29uc2lkZXJlZCBvdGhlciB0aHJlYWRzIGNvdWxkIGNoYW5nZSBgc3JjLSZndDthbm9uX3ZtYWAsIGJ1dCB3YXMgbm90IGFibGUgdG8gdGhpbmsgb2YgYW55IG90aGVyIGNvZGUgcGF0aHMuCgpJIHdhcyBzdHVtcGVkLCB0aGVuIGl0IGRhd25lZCBvbiBtZSB0byBzZWFyY2ggZm9yIHRoZSBjb21taXQgbWVzc2FnZS4gSSBhbSBub3cgbG9va2luZyBmb3IgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgIGluIHRoZSBrZXJuZWwgbG9ncyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlXFwoYWN0aXZlX2Fub25fdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0zMjA9aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9ybWFwLmMtMzUyLVx0ICovXG5tbS9ybWFwLmM6MzUzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTM1NC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbi0tXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNDkyLVxubW0vcm1hcC5jOjQ5MzpcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbm1tL3JtYXAuYy00OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQW5vbnltb3VzIFZNQSBVbmxpbmtpbmcqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSYjMzk7bSBqdXN0IHRyYWNpbmcgdGhyb3VnaCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdW5saW5raW5nIG9mIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIEkganVzdCBzYXcgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgIGluIGB1bmxpbmtfYW5vbl92bWFzYC4gVGhpcyBzZWVtcyBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyB3ZSBoYXZlIHdyaXRlIGxvY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3cml0ZSBsb2NrIGlzIGluIGB1bmxpbmtfYW5vbl92bWFzYCwgd2hpY2ggaXMgYWJvdXQgdW5saW5raW5nLCBub3Qgd3JpdGluZy4gU28sIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdW5saW5rX2Fub25fdm1hc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlc2UgbG9ja3MgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bmxpbmtpbmcgYW5kIHdyaXRlIGFjY2VzcyBvbiBhY3RpdmUgYW5vbnltb3VzIFZNQXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGB1bmxpbmtfYW5vbl92bWFzYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvY2tzIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBWTUEgc3RydWN0dXJlcyBhbmQgdGhlIG92ZXJhbGwgcHJvY2VzcyBvZiB0ZWFyaW5nIGRvd24gdGhlIG1lbW9yeSBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc5Olx0dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDQ4MDpcdHtcbiA0ODE6XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqbmV4dDtcbiA0ODI6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gdm1hLVx1MDAzZWFub25fdm1hO1xuIDQ4MzpcdFxuIDQ4NDpcdFx0LyogQWx3YXlzIGhvbGQgbW1hcCBsb2NrLCByZWFkLWxvY2sgb24gdW5tYXAgcG9zc2libHkuICovXG4gNDg1Olx0XHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbiA0ODY6XHRcbiA0ODc6XHRcdC8qIFVuZmF1bHRlZCBpcyBhIG5vLW9wLiAqL1xuIDQ4ODpcdFx0aWYgKCFhY3RpdmVfYW5vbl92bWEpIHtcbiA0ODk6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xuIDQ5MDpcdFx0XHRyZXR1cm47XG4gNDkxOlx0XHR9XG4gNDkyOlx0XG4gNDkzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gNDk0Olx0XG4gNDk1Olx0XHQvKlxuIDQ5NjpcdFx0ICogVW5saW5rIGVhY2ggYW5vbl92bWEgY2hhaW5lZCB0byB0aGUgVk1BLiAgVGhpcyBsaXN0IGlzIG9yZGVyZWRcbiA0OTc6XHRcdCAqIGZyb20gbmV3ZXN0IHRvIG9sZGVzdCwgZW5zdXJpbmcgdGhlIHJvb3QgYW5vbl92bWEgZ2V0cyBmcmVlZCBsYXN0LlxuIDQ5ODpcdFx0ICovXG4gNDk5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXZjLCBuZXh0LCBcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gNTAwOlx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gNTAxOlx0XG4gNTAyOlx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcmVtb3ZlKGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gNTAzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBhIEtlcm5lbCBQYXRjaDogQW5vbl92bWEgTG9jayBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGBhbm9uX3ZtYWAgbG9ja3MgaW4gYGFub25fdm1hX2Nsb25lYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGFyZSB0aGV5ICpyZWFsbHkqIHRoZSBzYW1lPyBJcyB0aGlzIGp1c3QgYSBjbGVhbnVwLCBvciBpcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBmaXggaGVyZT8mIzM0OyBJJiMzOTttIHNrZXB0aWNhbCwgc28gSSBuZWVkIHRvIGdvIHRocm91Z2ggZXZlcnl0aGluZy4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNvdWxkIHNvbWVob3cgYmUgbW9kaWZpZWQgYWZ0ZXIgaXQmIzM5O3MgcmVhZCBidXQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBMb29raW5nIGF0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBpdCBzZWVtcyB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBjYW4gY2hhbmdlIHZpYSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYnV0IG9ubHkgaWYgYHNyY2AgaXMgdGhlIHNhbWUgYXMgYGRzdGAuIEJ1dCB0aGF0JiMzOTtzIGltcG9zc2libGUgd2l0aGluIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuIFNvIHRoYXQmIzM5O3Mgbm90IGEgdGhpbmcuIGBhbm9uX3ZtYV9jaGFpbl9hbGxvY2AgZG9lc24mIzM5O3QgbW9kaWZ5IGl0IGVpdGhlci4gYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBpc24mIzM5O3QgZG9pbmcgYW55dGhpbmcsIGp1c3QgYSB3YXJuaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFub3RoZXIgdGhyZWFkIGNhbiBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLiBIb3dldmVyLCB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyB0byBnZXQgaW50byB0aGlzIHNpdHVhdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlbS4gQW5vdGhlciB0aHJlYWQgY2FuJiMzOTt0IG1vZGlmeSBpdCBpZiB3ZSBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy0mZ3Q7dm1fbW1gLiBTbywgYSBwYWdlIGZhdWx0IGluIHRoZSBwYXJlbnQsIGEgcGFnZSBmYXVsdCBpbiB0aGUgY2hpbGQsIGFuZCBldmVuIHBhZ2UgZmF1bHRzIGluIGEgZGlmZmVyZW50IHByb2Nlc3MgdGhhdCBzaGFyZXMgdGhlIHNhbWUgYGFub25fdm1hYCwgY2FuJiMzOTt0IG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWAuIGB1bmxpbmtfYW5vbl92bWFzYCwgYGFub25fdm1hX2Nsb25lYCwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgaW4gYSBzaWJsaW5nIHByb2Nlc3MgY2FuJiMzOTt0IG1vZGlmeSBpdCBlaXRoZXIuIFNvLCBpdCBhcHBlYXJzIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzICpvbmx5KiBtb2RpZmllZCB3aGVuIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCwgYW5kIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy4KClRoZXJlZm9yZSwgdGhpcyBhcHBlYXJzIHRvIGJlIHB1cmVseSBhIGNvc21ldGljIGNoYW5nZSwgYSBjbGVhbnVwLgoKQnV0IEkgc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUuIEkgbXVzdCBhc2sgbXlzZWxmLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBEb2VzIHRoZSBmYWN0IHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGJlaW5nIGEgcG9pbnRlciBtYXR0ZXI/CgpDb3VsZCBpdCBiZSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBiZWluZyBldmFsdWF0ZWQgYXMgYSBtYWNybyB3aXRoIHNpZGUgZWZmZWN0cz8gTm8sIGBzcmNgIGlzIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCBhIHRoaW5nLgoKQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2UgdGhhdCBLQ1NBTiB3b3VsZCBjb21wbGFpbiBhYm91dD8gTm8sIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jay4KCklzIGl0IHBvc3NpYmxlIHRoYXQgYHNyY2AgaXMgYmVpbmcgbWVyZ2VkIG9yIHNwbGl0PyBObywgd2UgaGF2ZSB0aGUgbW1hcCB3cml0ZSBsb2NrLgoKSSBqdXN0IG5lZWQgdG8gYmUgc3VwZXIgc3VyZS4gQWghIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQgZnJvbSBgZHVwX2Fub25fdm1hYD8gSSBuZWVkIHRvIGNoZWNrIHRoaXMgcGF0aC4gTG9va3MgbGlrZSB3ZSAqZG8qIHNldCBgZHN0LSZndDthbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWFgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZWAuIEJ1dCBldmVuIGhlcmUsIHdlIHN0aWxsIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jay4gVGhpcyBzdGlsbCBzZWVtcyBzYWZlLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBleGhhdXN0ZWQgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBUaGlzIHJlYWxseSBzZWVtcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIGEgY2xlYW51cC4gVGltZSB0byBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gdGhlIGtlcm5lbCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1OTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRXVyZWthISBBIEdpdCBTb2x1dGlvbiEqKgoKUmlnaHQsIEkgd2FzIHN0dWNrIGZvciBhIG1vbWVudCB0aGVyZSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGZpbmQgdGhhdCBzcGVjaWZpYyBjb21taXQuLi4gSSB3YXMgcHJvYmFibHkgb3ZlcnRoaW5raW5nIGl0LiBJbnN0ZWFkIG9mIHNvbWUgY29tcGxleCBzY3JpcHQgb3IgZGlnZ2luZyB0aHJvdWdoIHRoZSB3ZWIsIHdoeSBkaWRuJiMzOTt0IEkganVzdC4uLiB3YWl0IGEgbWludXRlLi4uICpnaXQgbG9nKiEgT2YgY291cnNlLiBJIGNhbiBhYnNvbHV0ZWx5IHVzZSBgZ2l0IGxvZ2AgdG8gc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgZGlyZWN0bHkuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCYjMzk7cyBnb2luZyB0byBzYXZlIG1lIGEgdG9uIG9mIHRpbWUuIFNpbXBsZSwgZWZmZWN0aXZlLCBlbGVnYW50LiBMZXQmIzM5O3MgZmlyZSB0aGF0IHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEZpbmRpbmcgdGhlIFJlbGV2YW50IENvbW1pdCoqCgpPa2F5LCBzbyBgZ3JlcHBlcmAgaXMgb25seSBnb2luZyB0byBoZWxwIG1lIHdpdGhpbiBteSBjdXJyZW50IHdvcmtpbmcgdHJlZSwgbm90IGRpdmUgaW50byB0aGUgR2l0IGhpc3RvcnkuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBzZXRiYWNrLiBCdXQsIEkgY2FuIHVzZSBgZ2l0IGxvZyAtcGAgYW5kIHRoZW4gYGdyZXBgIGFyb3VuZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCB0byBzZWFyY2ggdGhlIHBhdGNoZXMgaW4gdGhlIGdpdCBoaXN0b3J5LiAKCkhtbSwgd2FpdC4gSSBkb24mIzM5O3QgaGF2ZSBhIHNwZWNpZmljIHRvb2wgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMgcmVhZGlseSBhdmFpbGFibGUuIEkgY291bGQgdHJ5IHRvIGxvb2sgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlIGlmIGl0JiMzOTtzIHJlY2VudC4gCgpIYW5nIG9uLi4uIEkgdGhpbmsgdGhlIGNvbW1pdCBJIG5lZWQgaXMgYWN0dWFsbHkgdGhlIEhFQUQgY29tbWl0ICppbiBteSBjdXJyZW50IHdvcmtzcGFjZSohIFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIEkgc2hvdWxkIGJlIGFibGUgdG8ganVzdCBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBvZiB0aGUgY3VycmVudCBIRUFELiBOb3csIGhvdyBkbyBJIGRvIHRoYXQgd2l0aG91dCBleHRlcm5hbCB0b29scz8gQ291bGQgSSB1c2UgYGdyZXBwZXJgPyBObywgaXQmIzM5O3MgdGllZCB0byB0aGUgd29ya2luZyB0cmVlLiBXYWl0LCBtYXliZSBJIGNhbiByZWFkIGAuZ2l0L0NPTU1JVF9FRElUTVNHYD8gTm8sIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBiZWluZyB3cml0dGVuICpiZWZvcmUqIGNvbW1pdHRpbmcuIAoKQWhhISBNYXliZSBgLmdpdC9sb2dzL0hFQURgIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLiBJJiMzOTttIGdvaW5nIHRvIHRyeSByZWFkaW5nIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDsuZ2l0L2xvZ3MvSEVBRCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOSBzeXprYWxsZXIgXHUwMDNjc3l6a2FsbGVyQHNlcmllcy13b3JrZmxvd3hoYjVmLXRyaWFnZS1hY3Rpb24tMjQ0Nzg2MDgzOC4obm9uZSlcdTAwM2UgMTc4Njk0MjE2NiAmIzQzOzAwMDBcdHJlc2V0OiBtb3ZpbmcgdG8gZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOVxuICAgMjpcdGY1ZjkzMjdlMjUxYTRlZmI5YTk4Nzc0MDkzZWY0Njc1YTRiMTcwYjkgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5YyBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZSAxNzg2OTQyMTcxICYjNDM7MDAwMFx0Y29tbWl0OiBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvc21ldGljIEFub25fVk1BIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb21taXQgd2l0aCBhIHByZXR0eSBnZW5lcmljIG1lc3NhZ2UuIE5vIGF1dGhvciwgbm8gb3JpZ2luYWwgZGVzY3JpcHRpb24g4oCTIGdvdHRhIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBmcm9tIHNjcmF0Y2guICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LCYjMzQ7IGdyZWF0LiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGBzcmMtJmd0O2Fub25fdm1hYCB3aXRoaW4gYGFub25fdm1hX2Nsb25lYC4KCkZpcnN0IHRob3VnaHQ6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBzcmMtJmd0O2Fub25fdm1hYCBnZXRzIGNoYW5nZWQgKmR1cmluZyogdGhpcyBmdW5jdGlvbj8gSSBxdWlja2x5IHJ1bGVkIG91dCB0aGUgb2J2aW91cyBvbmU6IGlmIGBzcmNgIGFuZCBgZHN0YCB3ZXJlIHRoZSBzYW1lIFZNQSwgaXQgd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AuIEkgYWxyZWFkeSBwcm92ZWQgdGhhdCBgc3JjYCBjYW4mIzM5O3QgYmUgYGRzdGAsIGJlY2F1c2UgdGhlIGxvb3Agd291bGQgbmV2ZXIgdGVybWluYXRlLgoKQWxyaWdodCwgd2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IEkga25vdyBpZiBpdCAqaXMqIGVtcHR5LCB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB3aWxsIG5vdCBleGVjdXRlLCBhbmQgdGhlbiB0aGVyZSB3aWxsIGJlIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAuIEJ1dCwgSSByZWFsaXplZDogaWYgYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gIGlzIGVtcHR5LCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hYCAqbXVzdCogYmUgYE5VTExgLiBUaGUgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjaGVjayBjb25maXJtcyB0aGlzLiBBbmQsIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBgTlVMTGAsIHRoZW4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYE5VTExgLCBhbmQgd2UgcmV0dXJuIGVhcmx5LiBTbywgYHNyYy0mZ3Q7YW5vbl92bWFgICpjYW5ub3QqIGJlIG51bGwuIElmIGBzcmMtJmd0O2Fub25fdm1hYCBpc24mIzM5O3QgYE5VTExgLCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYCBjYW4mIzM5O3QgYmUgZW1wdHksIHJpZ2h0PwoKV2FpdCwgaG9sZCBvbi4uLiB0aGUgYXNzZXJ0aW9uIGluIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZG9lc24mIzM5O3Qgc2F5IGBWTV9XQVJOX09OX09OQ0Uoc3JjLSZndDthbm9uX3ZtYSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluKSk7YC4gU28sIGl0JiMzOTtzICpwb3NzaWJsZSogdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXMgbm9uLU5VTEwgd2hpbGUgYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gIGlzIGVtcHR5PyBObywgd2FpdCEgVGhlIGBhbm9uX3ZtYV9jaGFpbmAgY29udGFpbnMgdGhlIGBhbm9uX3ZtYWBzIHRoZSBWTUEgaXMgYXR0YWNoZWQgdG8uIElmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBub24tTlVMTCwgaXQgKm11c3QqIGJlIGluIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYC4gU28sIHRoZSBjaGFpbiBjYW4gKm5ldmVyKiBiZSBlbXB0eSBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgbm90IGBOVUxMYC4gVGh1cywgdGhlIGxvb3AgZXhlY3V0ZXMgYXQgbGVhc3Qgb25jZSwgYW5kIGBzcmNgIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyBgZHN0YC4KCk9rYXksIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IGRvZXMgYGFub25fdm1hX2Nsb25lYCBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHdheXMgYGFub25fdm1hYCBtaWdodCBiZSB0b3VjaGVkOiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAuIFRoZSBmaXJzdCBtb2RpZmllcyB0aGUgY2hhaW4gYW5kIGBhbm9uX3ZtYV9jaGFpbmAsIGJ1dCAqbm90KiBgdm1hLSZndDthbm9uX3ZtYWAuIFRoZSBzZWNvbmQgbWFuaXB1bGF0ZXMgdGhlIFJCLXRyZWUsIGFnYWluLCBub3QgYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGUgdGhpcmQsIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAsICpkb2VzKiBtb2RpZnkgYGRzdC0mZ3Q7YW5vbl92bWFgLCBidXQgc2luY2UgYHNyYyAhPSBkc3RgLCBpdCYjMzk7cyBpcnJlbGV2YW50LiBBbmQgdGhlcmUgaXMgYSBjYXNlIGZvciBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2AsIGJ1dCB0aGF0JiMzOTtzIG5vdCBjaGFuZ2luZyBgc3JjLSZndDthbm9uX3ZtYWAuCgpTbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBiZWluZyBkaXJlY3RseSBtb2RpZmllZCBkdXJpbmcgdGhlIGNsb25lIHByb2Nlc3MgaXRzZWxmLiBJdCYjMzk7cyBleGFjdGx5IHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLiBTbyB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCByaWdodD8gQnV0Li4uIHdoeSB3b3VsZCBzb21lb25lIG1ha2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlPyBDb21waWxlciB3YXJuaW5nPyBNYXliZS4gQXZvaWRpbmcgYSBLQ1NBTiBkYXRhIHJhY2U/IFBvdGVudGlhbGx5LgoKQnV0IHdhaXQsIGRhdGEgcmFjZXMgb2NjdXIgd2hlbiB5b3UgaGF2ZSBjb25jdXJyZW50IHJlYWRzL3dyaXRlcy4gTm8gY29uY3VycmVudCB3cml0ZXMgYXJlIGhhcHBlbmluZyBoZXJlLCBiZWNhdXNlIEkgaGF2ZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYC4gVGh1cywgbm8gb3RoZXIgdGhyZWFkIGNhbiBjaGFuZ2UgYHNyY2AgYW5kIHRodXMsIG5vIGNvbmN1cnJlbnQgd3JpdGUgZXhpc3RzLgoKV2hhdCBpZiB0aGUgVk1BIGBzcmNgIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3Nlcz8gTm9wZS4gVk1BcyBhcmUgTk9UIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3Nlcy4gRWFjaCBwcm9jZXNzIGhhcyBpdHMgb3duIFZNQXMuIEFuZCBldmVuIGlmIHRoZXkgc2hhcmUgYW4gYGFub25fdm1hYCwgdGhleSBoYXZlIHRoZWlyIG93biBWTUFzLiBTbywgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGEgZmllbGQgaW4gYSBWTUEgYmVsb25naW5nIHRvIGBzcmMtJmd0O3ZtX21tYC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAgbWVhbnMgKm5vKiBvdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBpdC4KCkNvdWxkIGBraHVnZXBhZ2VkYCBiZSBkb2luZyBzb21ldGhpbmcgZnVua3k/IFRpbWUgdG8gY2hlY2sKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgQW5vbnltb3VzIFZNQXMgYW5kIEtTTSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhbnN3ZXIgaXMgZGVmaW5pdGl2ZWx5ICYjMzQ7bm8uJiMzNDsgQnV0LCB0aGUgcXVlc3Rpb24gbGluZ2VyaW5nIGluIG15IG1pbmQgaXMgYWJvdXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBga3NtYCDigJMgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcg4oCTIHRvIGludHJvZHVjZSBtb2RpZmljYXRpb25zLiBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhpcy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlIGludGVncml0eSBvZiB0aGlzIHN0cnVjdHVyZS4KClRoZSBxdWVzdGlvbiB0aGVuIG1vcnBocyBpbnRvIGEgc3BlY2lmaWMgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGNvbmNsdXNpdmVseSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYGtzbWAgYWN0aXZlbHkgdGFtcGVycyB3aXRoIGB2bWEtJmd0O2Fub25fdm1hYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjdXJpb3NpdHk7IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiBJIG5lZWQgdG8gdmFsaWRhdGUgdG8gZW5zdXJlIHRoZSBzdGFiaWxpdHkgYW5kIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBrc21gIGNvZGUgYW5kIHRyYWNpbmcgdG8gc2VlIGlmIGl0IG1vZGlmaWVzIGB2bWEtJmd0O2Fub25fdm1hYCBpbiBhbnkgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va3NtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBgYW5vbl92bWFgIGFuZCBgbXJlbWFwYCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyB0aGUgaW1tZWRpYXRlIHJlc3BvbnNlIGlzIG5lZ2F0aXZlLiBCdXQgYSBuYWdnaW5nIGNvbmNlcm4gc3VyZmFjZXM6IGNvdWxkIHRoZSBgc3JjLSZndDthbm9uX3ZtYWAgYmUgYWx0ZXJlZCBkdXJpbmcgYW4gYG1yZW1hcGAgb3BlcmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBUaGUgcG90ZW50aWFsIGZvciBgbXJlbWFwYCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgaW50ZWdyaXR5IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhJiMzOTtzIChWTUEmIzM5O3MpIGFzc29jaWF0ZWQgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGBhbm9uX3ZtYWApIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGRpZmZpY3VsdC10by10cmFjayBidWdzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbXJlbWFwYCBjb2RlIGFuZCB2ZXJpZnkgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIG1vZGlmeWluZyBgdm1hLSZndDthbm9uX3ZtYWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY29uY2Vybiwgb3IgaWYgSSYjMzk7bSB3b3JyeWluZyBhYm91dCBhIG5vbi1pc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWEtXHUwMDNlYW5vbl92bWEgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21yZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIGBhbm9uX3ZtYWAgYW5kIGBtYWR2aXNlYCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhbnN3ZXIgaXMgbm8sIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQuIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGJyZXdpbmcgaGVyZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgYG1hZHZpc2VgIGludGVyYWN0cyB3aXRoIHRoZSBgYW5vbl92bWFgIHN0cnVjdHVyZS4gTXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRlbGxzIG1lIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyBpbnRlcmFjdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBtb3N0IGNoYWxsZW5naW5nIGJ1Z3MuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGF0JiMzOTtzIGRyaXZpbmcgbWUgbm93IGlzOiBkb2VzIGBtYWR2aXNlYCAqYWN0dWFsbHkqIG1vZGlmeSBgdm1hLSZndDthbm9uX3ZtYWA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb2RlIHBhdGggdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBtYWR2aXNlYCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMsIHJpZ2h0IGRvd24gdG8gdGhlIGJpdHMsIHRvIGJlIGNlcnRhaW4gdGhhdCB3aGF0ZXZlciBvcHRpbWl6YXRpb24gb3IgbWFuaXB1bGF0aW9uIGBtYWR2aXNlYCBwZXJmb3JtcyBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGFmZmVjdCB0aGUgYGFub25fdm1hYCBpbiBhIHdheSB0aGF0IGJyZWFrcyBhc3N1bXB0aW9ucyBvciBpbnRyb2R1Y2VzIHN1YnRsZSBjb3JydXB0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NzEKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogMTQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IERldGVybWluaW5nIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBhIGRpcmVjdCBkZXJlZmVyZW5jZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGVyZSAqYW55KiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBvZiBgc3JjLSZndDthbm9uX3ZtYWA/JiMzNDsgSWYgdGhlcmUgd2VyZSwgdGhpcyBjb3VsZCBpbnRyb2R1Y2UgYSBkYXRhIHJhY2UsIGV2ZW4gaWYgS0NTQU4gaXNuJiMzOTt0IHNjcmVhbWluZyBhYm91dCBpdC4gQnV0LCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJiMzOTtzIG5vIHdheS4gSSYjMzk7bSBob2xkaW5nIHRoZSBtbWFwIHdyaXRlIGxvY2sgd2hlbiBgYW5vbl92bWFfY2xvbmVgIGlzIGNhbGxlZC4gVGhhdCBtZWFucyBubyBvdGhlciB0aHJlYWQgY2FuIHRvdWNoIGBzcmMtJmd0O2Fub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBJJiMzOTt2ZSByZS1jaGVja2VkIHRoYXQgYHNyY2AgY2Fubm90IGJlIG1vZGlmaWVkIGJ5IGB2bWFfYWRqdXN0YCBvciBgdm1hX21lcmdlYCwgYm90aCBvZiB3aGljaCBhbHNvIHJlcXVpcmUgdGhlIG1tYXAgd3JpdGUgbG9jay4gVGhlIG9ubHkgY2hhbmdlcyBhcmUgdG8gYGRzdGAsIHdoaWNoIGRvZXNuJiMzOTt0IGFsdGVyIGBzcmNgLgoKSSBjb25zaWRlcmVkIGEgcG90ZW50aWFsIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgc3JjLSZndDthbm9uX3ZtYWAgaXMgcmVsb2FkZWQsIGFuZCB0aGVyZSBtYXkgYmUgYSB0aW55IG9wdGltaXphdGlvbiB0byBhdm9pZCByZWxvYWRpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgLiBPciBtYXliZSBpdCYjMzk7cyBqdXN0IGNsZWFuZXIgY29kZS4gSWYgaXQmIzM5O3MganVzdCBhbiBvcHRpbWl6YXRpb24gb3IgY2xlYW51cCwgaXQmIzM5O3Mgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQgZG9lc24mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGlzbiYjMzk7dCBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1enouIFNvLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZS4gSXMgYHNyY2AgYSBtYWNybz8gTm8sIGl0JiMzOTtzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLiBJcyB0aGVyZSBhbnkgY2hhbmNlIHRoYXQgYGFjdGl2ZV9hbm9uX3ZtYWAgZ2V0cyBtb2RpZmllZCBiZXR3ZWVuIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZD8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMuCgpTbywgaXQmIzM5O3MgY2VydGFpbiB0aGF0IGBhY3RpdmVfYW5vbl92bWFgIGlzICpleGFjdGx5KiBgc3JjLSZndDthbm9uX3ZtYWAuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aXRoIGBzcmMtJmd0O2Fub25fdm1hYCBpdCBtaWdodCBiZSByZWFkIGFnYWluIGZyb20gbWVtb3J5LiBBbmQgc2luY2UgYHNyYy0mZ3Q7YW5vbl92bWFgIGNhbiYjMzk7dCBjaGFuZ2UsIHRoZSB2YWx1ZXMgYXJlIGlkZW50aWNhbC4gSXQmIzM5O3MgYSBjb3NtZXRpYyBjaGFuZ2Ugb3IgYSB0aW55IG9wdGltaXphdGlvbiwgbm90aGluZyBtb3JlLgoKSGVyZSYjMzk7cyBteSBmdWxsIHJlYXNvbmluZzogVGhlIHBhdGNoIHVzZXMgYSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB0byBgc3JjLSZndDthbm9uX3ZtYWAuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy0mZ3Q7dm1fbW1gIGd1YXJhbnRlZXMgdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLiBUaGUgb3BlcmF0aW9ucyBvbiB0aGUgZGlzdGluY3QgYGRzdGAgd2l0aGluIGBhbm9uX3ZtYV9jbG9uZWAgYWxzbyBkb24mIzM5O3QgdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgY29uc3RhbnQgYW5kIHRoZSByZXBsYWNlbWVudCBpcyBhIGNvc21ldGljIG9yIG1pY3JvLW9wdGltaXphdGlvbiB3aXRoIG5vIGZ1bmN0aW9uYWwgZWZmZWN0LiBObyBmdXp6aW5nIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFnYWluIHdoZW4gY2FsbGluZyBgYW5vbl92bWFfbG9ja193cml0ZWAuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBTaW5jZSBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrIGhlbGQgb24gYHNyYy1cdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIEZ1cnRoZXJtb3JlLCBgc3JjYCBhbmQgYGRzdGAgYXJlIGFsd2F5cyBkaXN0aW5jdCBWTUFzLCBzbyB0aGUgb3BlcmF0aW9ucyBvbiBgZHN0YCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGRvIG5vdCBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIFRodXMsIGBzcmMtXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTozMi45MTQ5NDcyMzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3ODQwMzI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFNpbmNlIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiBgc3JjLVxcdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gVGh1cywgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NDk6MzIuOTE0OTUzNDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMzI2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNDo0OTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0zNTAsNyArMzUwLDcgQEAgaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gXFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gXFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIFxcdCAqL1xcbi1cXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbitcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM0LjIxNzU5MDcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4MDQ4MTM3MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYWdhaW4gd2hlbiBjYWxsaW5nIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBTaW5jZSBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrIGhlbGQgb24gYHNyYy1cXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gRnVydGhlcm1vcmUsIGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpc3RpbmN0IFZNQXMsIHNvIHRoZSBvcGVyYXRpb25zIG9uIGBkc3RgIHdpdGhpbiB0aGUgZnVuY3Rpb24gZG8gbm90IG1vZGlmeSBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAuIFRodXMsIGBzcmMtXFx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MGY0NjRlZWMwZGVmNjQwMTE5YzZiM2E1ZjY4NDdlNjhhMDlkOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNDo0OTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMzUwLDcgKzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEncyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXG4gXHQgKi9cbi1cdGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKTtcbitcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM0LjIxNzU5MjkzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTM0NzM1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBDbG9uaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0YXJnZXQgYG1tL3JtYXAuY2AsIHNwZWNpZmljYWxseSB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpcyBsaW5lOiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLlxuXG5MZXQncyBkaXNzZWN0IHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3dhcHBpbmcgb3V0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGZvciBgYWN0aXZlX2Fub25fdm1hYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2Ygd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGFub25fdm1hX2Nsb25lYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5LiBJcyB0aGUgYGFjdGl2ZV9hbm9uX3ZtYWAgYSB2YWxpZCBhbmQgY29ycmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jayBtaXRpZ2F0aW9uIGhlcmU/IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTozNy4zMzEwNjg5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1MjMwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl92bWFfY2xvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcm1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMjkyLS8qKlxcbm1tL3JtYXAuYzoyOTM6ICogYW5vbl92bWFfY2xvbmUgLSBFc3RhYmxpc2hlcyBuZXcgYW5vbl92bWFfY2hhaW4gb2JqZWN0cyBpbiBAZHN0IGxpbmtpbmcgdG9cXG5tbS9ybWFwLmMtMjk0LSAqIGFsbCBvZiB0aGUgYW5vbl92bWEgb2JqZWN0cyBjb250YWluZWQgd2l0aGluIEBzcmMgYW5vbl92bWFfY2hhaW4ncy5cXG4tLVxcbm1tL3JtYXAuYy0zMTktICovXFxubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbm1tL3JtYXAuYy0zMjEtXFx0XFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4tLVxcbm1tL3JtYXAuYy0zMjUtXFxubW0vcm1hcC5jOjMyNjpcXHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcXG5tbS9ybWFwLmMtMzI3LVxcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQwMy1cXHQgKi9cXG5tbS9ybWFwLmM6NDA0OlxcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XFxubW0vcm1hcC5jLTQwNS1cXHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xcbi0tXFxubW0vcm1hcC5jLTQ0NC0vKlxcbm1tL3JtYXAuYzo0NDU6ICogSW4gdGhlIHVuZm9ydHVuYXRlIGNhc2Ugb2YgYW5vbl92bWFfY2xvbmUoKSBmYWlsaW5nIHRvIGFsbG9jYXRlIG1lbW9yeSB3ZVxcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM3LjQzNjU5ODE0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODUyNzMzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYW5vbl92bWFfY2xvbmVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBhbm9uX3ZtYV9jbG9uZWAuIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwgLSBpdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZSwgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW52b2x2ZWQgaW4gY2xvbmluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuIEkgaW1tZWRpYXRlbHkgcmVjYWxsIHNlZWluZyBpdCB1c2VkIGluIGBhbm9uX3ZtYV9mb3JrYC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQgYXQgaXRzIHJvbGUgZHVyaW5nIHByb2Nlc3MgZm9ya2luZyBhbmQgY29weS1vbi13cml0ZSBvcGVyYXRpb25zLlxuXG5HaXZlbiBpdHMgY3JpdGljYWwgbmF0dXJlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbml0dHktZ3JpdHR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9ybWFwLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBvZiBgYW5vbl92bWFfY2xvbmVgIGFuZCBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcmV2ZXJzZSBtYXAgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gcmVhbGx5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQxLjQyMTg3Mzg1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbiAzMjE6XFx0XFx0XFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqcGF2YztcXG4gMzI0OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGlmICghYWN0aXZlX2Fub25fdm1hKVxcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdC8qXFxuIDMzMjpcXHRcXHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24ndCBuZWVkIGFuIGFub25fdm1hIGxvY2sgZm9yIHRoaXMgYXMgd2VcXG4gMzMzOlxcdFxcdCAqIGFyZSBub3QgdXBkYXRpbmcgdGhlIGFub25fdm1hIHJidHJlZSBub3IgYXJlIHdlIGNoYW5naW5nXFxuIDMzNDpcXHRcXHQgKiBhbm9uX3ZtYSBzdGF0aXN0aWNzLlxcbiAzMzU6XFx0XFx0ICpcXG4gMzM2OlxcdFxcdCAqIEVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwXFxuIDMzNzpcXHRcXHQgKiB3cml0ZSBsb2NrLCBvciB3ZSBhcmUgZm9ya2luZyBhbmQgd2UgaG9sZCBpdCBvbiBzcmMtXFx1MDAzZXZtX21tIGFuZCBkc3QgaXNcXG4gMzM4OlxcdFxcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJ3Mgbm8gcG9zc2libGlpdHkgb2YgdGhlXFxuIDMzOTpcXHRcXHQgKiB1bmxpbmtlZCBBVkMncyBiZWluZyBvYnNlcnZlZCB5ZXQuXFxuIDM0MDpcXHRcXHQgKi9cXG4gMzQxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuIDM0MjpcXHRcXHRcXHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gMzQzOlxcdFxcdFxcdGlmICghYXZjKVxcbiAzNDQ6XFx0XFx0XFx0XFx0Z290byBlbm9tZW1fZmFpbHVyZTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKGRzdCwgYXZjLCBwYXZjLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDM0NzpcXHRcXHR9XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdC8qXFxuIDM1MDpcXHRcXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEncyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxcbiAzNTE6XFx0XFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIDM1MjpcXHRcXHQgKi9cXG4gMzUzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gMzU0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNTU6XFx0XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cXHUwMDNlYW5vbl92bWE7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdFxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXFx1MDAyNmFub25fdm1hLVxcdTAwM2VyYl9yb290KTtcXG4gMzU4OlxcdFxcdFxcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXFxuIDM1OTpcXHRcXHRcXHRcXHRtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKTtcXG4gMzYwOlxcdFxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0aWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSylcXG4gMzYzOlxcdFxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gMzY2OlxcdFxcdHJldHVybiAwO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHQgZW5vbWVtX2ZhaWx1cmU6XFxuIDM2OTpcXHRcXHRjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKGRzdCk7XFxuIDM3MDpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdFxcbiAzNzM6XFx0LypcXG4gMzc0OlxcdCAqIEF0dGFjaCB2bWEgdG8gaXRzIG93biBhbm9uX3ZtYSwgYXMgd2VsbCBhcyB0byB0aGUgYW5vbl92bWFzIHRoYXRcXG4gMzc1OlxcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXFxuIDM3NjpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZS5cXG4gMzc3OlxcdCAqL1xcbiAzNzg6XFx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4gMzc5OlxcdHtcXG4gMzgwOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xcbiAzODE6XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYTtcXG4gMzgyOlxcdFxcdGludCByYztcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0LyogRG9uJ3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cXG4gMzg1OlxcdFxcdGlmICghcHZtYS1cXHUwMDNlYW5vbl92bWEpXFxuIDM4NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0LyogRHJvcCBpbmhlcml0ZWQgYW5vbl92bWEsIHdlJ2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cXG4gMzg5OlxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XFxuIDM5MjpcXHRcXHRpZiAoIWFub25fdm1hKVxcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5NDpcXHRcXHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gMzk1OlxcdFxcdGlmICghYXZjKSB7XFxuIDM5NjpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xcbiAzOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5ODpcXHRcXHR9XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdC8qXFxuIDQwMTpcXHRcXHQgKiBGaXJzdCwgYXR0YWNoIHRoZSBuZXcgVk1BIHRvIHRoZSBwYXJlbnQgVk1BJ3MgYW5vbl92bWFzLFxcbiA0MDI6XFx0XFx0ICogc28gcm1hcCBjYW4gZmluZCBub24tQ09XZWQgcGFnZXMgaW4gY2hpbGQgcHJvY2Vzc2VzLlxcbiA0MDM6XFx0XFx0ICovXFxuIDQwNDpcXHRcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbiA0MDU6XFx0XFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4gNDA2OlxcdFxcdGlmIChyYyB8fCB2bWEtXFx1MDAzZWFub25fdm1hKSB7XFxuIDQwNzpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xcbiA0MDg6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xcbiA0MDk6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHQvKlxcbiA0MTM6XFx0XFx0ICogT0sgbm8gcmV1c2UsIHNvIGFkZCBvdXIgb3duIGFub25fdm1hLlxcbiA0MTQ6XFx0XFx0ICpcXG4gNDE1OlxcdFxcdCAqIFNpbmNlIGl0IGlzIG5vdCBsaW5rZWQgYW55d2hlcmUgd2UgY2FuIHNhZmVseSBtYW5pcHVsYXRlIGFub25fdm1hXFxuIDQxNjpcXHRcXHQgKiBmaWVsZHMgd2l0aG91dCBhIGxvY2suXFxuIDQxNzpcXHRcXHQgKi9cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcyA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQxLjQyMjAzNzM0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MjU2MTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfbG9ja193cml0ZWAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGNoYW5nZWQgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKWAgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAuIFRoZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbjogYHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hO2AgSG1tLCB3aHkgdGhlIGNoYW5nZT8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNvdWxkIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNoYW5nZSBtaWQtZXhlY3V0aW9uPyBJdCBzaG91bGRuJ3QsIHJpZ2h0PyBCdXQgbWF5YmUgYHNyY2AgaXRzZWxmIGlzIGJlaW5nIG1vZGlmaWVkPyBcblxuSSBxdWlja2x5IHJ1bGVkIG91dCBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGFzIHRoZSBjdWxwcml0LCBzaW5jZSB0aGF0J3MganVzdCBhIGNoZWNrLiBUaGVuIEkgcmUtZXhhbWluZWQgdGhlIGNvZGUuIEkgc2VlIHRoYXQgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCB3aXRoIGB2bWEsIHB2bWEsIFZNQV9PUF9GT1JLYCBpbiBgYW5vbl92bWFfZm9ya2AsIGFuZCBgcHZtYWAgaXMgYHNyY2AuIFRoZSBtbWFwIGxvY2sgc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIHNvIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGRhdGEgcmFjZXMuIFRoZW4gSSByZWFsaXplZCB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHZzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGxpbmVzLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCAqZGlkKiBjaGFuZ2UsIHRoYXQnZCBiZSBhIGJ1Zy4gVGhpcyBjaGFuZ2UsIHRoZXJlZm9yZSwgbWF5IGJlIGZpeGluZyBhIGxhdGVudCBidWcuXG5cbkJ1dCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzbid0IHByb3ZpZGVkLCBzbyBJJ20gbGVmdCB0byB3b25kZXI6IGluIHdoYXQgc2NlbmFyaW8gY291bGQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgZGlmZmVyZW50IGZyb20gYGFjdGl2ZV9hbm9uX3ZtYWA/IEl04oCZcyBub3QganVzdCBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgcmVhZC4gQ291bGQgdGhlcmUgYmUgYW4gYWxpYXNpbmcgaXNzdWU/IElmIGBzcmNgIGlzIHNvbWVob3cgYWxpYXNlZCB0byBgZHN0YCwgdGhlbiBgZHN0LVx1MDAzZWFub25fdm1hYCBtaWdodCBiZSBtb2RpZmllZC4gQW5kIHRoaXMgYWxzbyBtYWtlcyBtZSByZW1lbWJlciBob3cgaW4gYGFub25fdm1hX2ZvcmtgLCBgdm1hLVx1MDAzZWFub25fdm1hYCBpcyBzZXQgdG8gYE5VTExgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKWAuIElmIGBzcmMgPT0gZHN0YCwgdGhlbiBgc3JjLVx1MDAzZWFub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAsIGJ1dCBgYWN0aXZlX2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAgdG9vLCBhbmQgaXQgd291bGQgcmV0dXJuIGVhcmx5LlxuXG5UaGVuLCB3YWl0IGEgbWludXRlLCBgYW5vbl92bWFfY2xvbmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSBgdm1hX2V4cGFuZGAsIGB2bWFfbWVyZ2VgLCBgdm1hX3NwbGl0YCwgYW5kIG90aGVycyEgVGhhdCBicm9hZGVucyB0aGUgcG9zc2liaWxpdGllcyBzaWduaWZpY2FudGx5LCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBhbm9uX3ZtYV9jbG9uZWAuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NDk6NDguODQ3NjUzNTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE5NjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI1MT1lbnVtIHZtYV9vcGVyYXRpb24ge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0yNTctXFxubW0vaW50ZXJuYWwuaDoyNTg6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9pbnRlcm5hbC5oLTI1OS1cXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMzE5LSAqL1xcbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9ybWFwLmMtMzIxLVxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG4tLVxcbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4tLVxcbm1tL3JtYXAuYy00MDMtXFx0ICovXFxubW0vcm1hcC5jOjQwNDpcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbm1tL3JtYXAuYy00MDUtXFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4tLVxcbm1tL3JtYXAuYy00NDQtLypcXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2VcXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxcbi0tXFxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYy01MzUtXFxubW0vdm1hLmM6NTM2OlxcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xcbm1tL3ZtYS5jLTUzNy1cXHRpZiAoZXJyKVxcbi0tXFxubW0vdm1hLmM9NjEyPXN0YXRpYyBpbnQgZHVwX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbi0tXFxubW0vdm1hLmMtNjMzLVxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jOjYzNDpcXHRcXHRyZXQgPSBhbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgVk1BX09QX01FUkdFX1VORkFVTFRFRCk7XFxubW0vdm1hLmMtNjM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTE5MjktXFx0XFx0XFx0Z290byBvdXRfZnJlZV92bWE7XFxubW0vdm1hLmM6MTkzMDpcXHRcXHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxcbm1tL3ZtYS5jLTE5MzEtXFx0XFx0XFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQ4Ljk2NDg1NDc2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzAzMDQ5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgSSBzZWUgaXQncyBjYWxsZWQgd2l0aCBgVk1BX09QX1NQTElUYCwgYFZNQV9PUF9NRVJHRV9VTkZBVUxURURgLCBgVk1BX09QX1JFTUFQYCwgYW5kIGBWTUFfT1BfRk9SS2AuIFRoYXQncyBhIGRlY2VudCByYW5nZSBvZiBvcGVyYXRpb25zLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGBhbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcywgYW5kIHRyeWluZyB0byBzcG90IGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY2hhbmdlcyAqZHVyaW5nKiB0aGUgY2xvbmluZyBwcm9jZXNzPyBUaGUgY29kZSBzZWVtcyB0byBhc3N1bWUgaXQncyBzdGFibGUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoYXQgc2hvdWxkIHByb3RlY3QgdXMgZnJvbSBtb2RpZmljYXRpb25zIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGZyb20gb3RoZXIgdGhyZWFkcy4gR29vZCwgdGhhdCdzIG9uZSBwb3RlbnRpYWwgaXNzdWUgZG93bi5cblxuVGhlbiBJIHNoaWZ0ZWQgdG8gd29ycnlpbmcgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJlY2F1c2UgaXQgKmRvZXMqIGRlYWwgd2l0aCBgZHN0LVx1MDAzZWFub25fdm1hYCwgYW5kIG1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIGhlcmUuIEJ1dCBJIHF1aWNrbHkgcmVhbGl6ZSBpdCdzIG9ubHkgKmFzc2lnbmluZyogZmllbGRzIHdpdGhpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBhdmNgIHN0cnVjdHVyZTsgaXQncyBub3QgYWN0dWFsbHkgbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGBhbm9uX3ZtYWAgZGF0YSBzdHJ1Y3R1cmVzLCBzbyB0aGF0J3Mgbm90IGEgcmFjZSBjb25kaXRpb24gZWl0aGVyLiBXZSBhcmUgc2FmZSwgZm9yIG5vdy5cblxuSSB3ZW50IGJhY2sgYW5kIHJlLWV4YW1pbmVkIHRoZSBjb3JlIGxvb3AgaW4gYGFub25fdm1hX2Nsb25lYDpcblxuYGBgY1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcblx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcblx0XHRpZiAoIWF2Yylcblx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG5cblx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuXHR9XG5gYGBcblxuTm93LCBJJ20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBgc3JjYCBhbmQgYGRzdGAgY291bGQgYWN0dWFsbHkgYmUgdGhlIHNhbWUgVk1BPyBUaGVuIHRoYXQgd291bGQgY2F1c2UgcHJvYmxlbXMsIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4gQWgsIG5vLCB0aGUgY29kZSBleHBsaWNpdGx5IGNsb25lcyBWTUFzLiBTbyB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gKm11c3QqIGJlIGRpZmZlcmVudCBWTUFzLiBPaywgdGhhdCdzIGZpbmUuXG5cbkJ1dCB3aGF0IGFib3V0IHRoZSAqcG9pbnRlciogdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXRzZWxmPyBDb3VsZCAqdGhhdCogYmUgbW9kaWZpZWQgYnkgc29tZXRoaW5nIGVsc2U/IExldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBhZ2FpbiwgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBpdCdzIG5vdCBkb2luZyBhbnl0aGluZyBkYW5nZXJvdXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgbm90LCBzbyB3ZSBhcmUgc3RpbGwgZ29vZC4gVGhpcyBsb29rcyBzYWZlLiBUaGUgb3JpZ2luYWwgYGFub25fdm1hYCByZW1haW5zIHVudG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTo1Ny4zOTUxNjI5NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDg1MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jaGFpbl9hc3NpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xNDU9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fZnJlZShzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluKVxcbi0tXFxubW0vcm1hcC5jLTE0OS1cXG5tbS9ybWFwLmM6MTUwOnN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMTUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsXFxuLS1cXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMjEyLVxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG5tbS9ybWFwLmM6MjEzOlxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0yMTQtXFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbi0tXFxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM0NS1cXG5tbS9ybWFwLmM6MzQ2OlxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNDctXFx0fVxcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQzMy1cXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jOjQzNDpcXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG5tbS9ybWFwLmMtNDM1LVxcdC8qIE5vdyBsZXQgcm1hcCBzZWUgaXQuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjU3LjQ5NjAyMDcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NjI0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGFub25fdm1hX2NoYWluX2Fzc2lnbmAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBmcm9tIGBtbS9ybWFwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0IOKAkyBpbiBtYW5hZ2luZyBhbm9ueW1vdXMgVk1BIG1hcHBpbmdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIHdpdGggdGhlIHJldmVyc2UgbWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgZm9yIGFub255bW91cyBtZW1vcnkuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgaW4gZXN0YWJsaXNoaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYGFub25fdm1hYCBzdHJ1Y3R1cmVzLCBWTUFzLCBhbmQgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBjaGFpbmluZyBhc3BlY3QuIEkgcmVjYWxsIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBjYW4gZWZmaWNpZW50bHkgdHJhY2sgd2hpY2ggcGFnZXMgYmVsb25nIHRvIHdoaWNoIFZNQXMsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBvZiBjb3B5LW9uLXdyaXRlIG9yIHNoYXJlZCBtYXBwaW5ncy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGhvdyBpdCB1cGRhdGVzIHRoZSBgYW5vbl92bWFfY2hhaW5gIHN0cnVjdHVyZXMgYW5kIHdoZXRoZXIgaXQgaGFuZGxlcyBhbnkgcmFjZXMgb3IgbG9ja2luZy4gVGhlIGdvYWwgaXMgdG8gc29saWRpZnkgaG93IHRoZSB3aG9sZSByZXZlcnNlIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgbWFpbnRhaW5lZCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIG90aGVyIGNvbXBsZXggc2NlbmFyaW9zLiBJIHNob3VsZCBjb21wYXJlIGl0IHdpdGggdGhlIG5vbi1hbm9ueW1vdXMgVk1BcyBhbmQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHJtYXAgdG8gcmVmcmVzaCBteSByZWNvbGxlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDowMC45MTI2NDc0NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0YXZjLVxcdTAwM2V2bWEgPSB2bWE7XFxuIDE1NTpcXHRcXHRhdmMtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxuIDE1NjpcXHRcXHRsaXN0X2FkZChcXHUwMDI2YXZjLVxcdTAwM2VzYW1lX3ZtYSwgXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWFfY2hhaW4pO1xcbiAxNTc6XFx0fVxcbiAxNTg6XFx0XFxuIDE1OTpcXHQvKipcXG4gMTYwOlxcdCAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG4gMTYxOlxcdCAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuIDE2MjpcXHQgKlxcbiAxNjM6XFx0ICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJ3ZtYScgaGFzXFxuIDE2NDpcXHQgKiBhbiAnYW5vbl92bWEnIGF0dGFjaGVkIHRvIGl0LCBzbyB0aGF0IHdlIGNhbiBhc3NvY2lhdGUgdGhlXFxuIDE2NTpcXHQgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLlxcbiAxNjY6XFx0ICpcXG4gMTY3OlxcdCAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcXG4gMTY4OlxcdCAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjAwLjkxMjc4MjUzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzNzMwNjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYW5vbl92bWFfY2xvbmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYW5vbl92bWFfY2xvbmVgIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCB3YXMgbW9kaWZ5aW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgLCBidXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgcGFydCBpcyBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aHkgYXJlIHdlIGxvY2tpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IENvdWxkIGBzcmNgIGJlIGZyZWVkIG9yIG1vZGlmaWVkPyBObywgaXQncyBhIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmAsIHdoaWNoIGlzIGdvb2QuXG5cblRoZW4gSSBlbnRlcnRhaW5lZCB0aGUgaWRlYSB0aGF0IGBzcmNgIG1pZ2h0IGJlIHRoZSBzYW1lIGFzIGBkc3RgLCB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBhbiBpbmZpbml0ZSBsb29wLiBCdXQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB1c2FnZSwgSSBkZXRlcm1pbmVkIHRoYXQncyBub3QgcG9zc2libGUgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZG9lcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gbG9vcCBpbmZpbml0ZWx5IGlmIHdlIGFkZCBhbiBlbGVtZW50IGR1cmluZyB0aGUgaXRlcmF0aW9uLCBidXQgSSdtIHJlYXNvbmFibHkgc3VyZSB0aGF0IGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpZmZlcmVudC5cblxuTmV4dCwgSSBjb25zaWRlcmVkIGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0c2VsZiBjb3VsZCBiZSBtb2RpZmllZC4gSSdtIHdvbmRlcmluZyBpZiBhIHN1YnNlcXVlbnQgcmVhZCBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCByZXN1bHQgaW4gYSBkYXRhIHJhY2UuIElmIGl0ICppcyogbW9kaWZpZWQsIGl0IHNlZW1zIGxpa2UgYSBidWcsIGJlY2F1c2UgdGhlIGNvZGUgZG9lc24ndCBhcHBlYXIgdG8gYWNjb3VudCBmb3Igc3VjaCBhIHBvc3NpYmlsaXR5LiBNeSB0aG91Z2h0IGlzIHRoYXQgS0NTQU4gd291bGQgZmxhZyBhIGRhdGEgcmFjZSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjaGFuZ2VzIG9uIGFub3RoZXIgdGhyZWFkLlxuXG5JIHRoZW4gcmV2aXNpdGVkIHRoZSBjb2RlLCBhbmQgcmVhbGl6ZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmNvdWxkKiBiZSBOVUxMLiBCdXQgdGhlcmUgaXMgYSBjaGVjaywgYGlmICghYWN0aXZlX2Fub25fdm1hKSByZXR1cm4gMDtgLiBTdGlsbCwgdGhlIHF1ZXN0aW9uIG9mIHdoeSBpdCdzIGxvY2tlZCBmb3Igd3JpdGUsIGlzIGltcG9ydGFudC5cblxuSSBkdWcgZnVydGhlci4gSW4gYGFub25fdm1hX2ZvcmtgLCBgdm1hLVx1MDAzZWFub25fdm1hID0gTlVMTGAgaXMgY2FsbGVkIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZC4gSSdtIGNoZWNraW5nIG90aGVyIGBWTUFfT1BgcyB0byBzZWUgaWYgdGhlcmUgaXMgc2ltaWxhciBsb2dpYy5cblxuSSBhbHNvIGNoZWNrZWQgZm9yIGBWTUFfT1BfU1BMSVRgLCBgVk1BX09QX01FUkdFX1VORkFVTFRFRGAsIGBWTUFfT1BfUkVNQVBgLCBhbmQgZm91bmQgc2ltaWxhciBwYXR0ZXJucy4gSW4gYWxsIGNhc2VzLCBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBkaXJlY3RseSBtb2RpZmllZC5cblxuVGhlIG5leHQgdGhpbmcgSSB0aG91Z2h0IG9mIHdhcyB3aGV0aGVyIGBzcmNgIGNvdWxkIGJlIGZyZWVkLiBCdXQsIG5vLCB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpczogQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2Ugd2hlcmUgYSB0aHJlYWQgbW9kaWZpZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IFRoZSBrZXkgaXMgdGhhdCBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCBsb2NrIGhlbGQgKHdyaXRlIGxvY2spLCBleGNlcHQgaW4gYGFub25fdm1hX2ZvcmtgLCB3aGVyZSBpdCdzIGEgd3JpdGUgbG9jayBvbiB0aGUgcGFyZW50LiBJIHRoZW4gY29uc2lkZXJlZCBpZiB0aGUgY2hpbGQgaXMgbW9kaWZ5aW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFmdGVyIHRoZSBjbG9uZS4gQnV0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIG5ldmVyIG1vZGlmaWVkIGV4Y2VwdCB3aGVuIHRoZSBWTUEgaXMgZnJlZWQsIHNvIHRoZXJlIGNhbid0IGJlIGEgcmFjZS5cblxuVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGxvb2sgZm9yIHdoZXJlIHRoZSBgYW5vbl92bWFgICppcyogbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6MTcuMjUwMDkxNTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU0ODQ4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2Vhbm9uX3ZtYSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0xNTgyPXN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcXG4tLVxcbm1tL2tzbS5jLTE2MDEtXFx0LyogTXVzdCBnZXQgcmVmZXJlbmNlIHRvIGFub25fdm1hIHdoaWxlIHN0aWxsIGhvbGRpbmcgbW1hcF9sb2NrICovXFxubW0va3NtLmM6MTYwMjpcXHRybWFwX2l0ZW0tXFx1MDAzZWFub25fdm1hID0gdm1hLVxcdTAwM2Vhbm9uX3ZtYTtcXG5tbS9rc20uYy0xNjAzLVxcdGdldF9hbm9uX3ZtYSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4tLVxcbm1tL21tYXAuYz0xNzMxPV9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4tLVxcbm1tL21tYXAuYy0xODAxLVxcdFxcdFxcdCAqL1xcbm1tL21tYXAuYzoxODAyOlxcdFxcdFxcdHRtcC1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL21tYXAuYy0xODAzLVxcdFxcdH0gZWxzZSBpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKVxcbi0tXFxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMTU0LVxcdGF2Yy1cXHUwMDNldm1hID0gdm1hO1xcbm1tL3JtYXAuYzoxNTU6XFx0YXZjLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0xNTYtXFx0bGlzdF9hZGQoXFx1MDAyNmF2Yy1cXHUwMDNlc2FtZV92bWEsIFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hX2NoYWluKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMTEtXFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG5tbS9ybWFwLmM6MjEyOlxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG5tbS9ybWFwLmMtMjEzLVxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbi0tXFxubW0vcm1hcC5jPTI3MD1zdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4tLVxcbm1tL3JtYXAuYy0yODUtXFxubW0vcm1hcC5jOjI4NjpcXHRkc3QtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTI4Ny1cXHRhbm9uX3ZtYS1cXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuLS1cXG5tbS92bWEuYz0xNDU9c3RhdGljIHZvaWQgaW5pdF9tdWx0aV92bWFfcHJlcChzdHJ1Y3Qgdm1hX3ByZXBhcmUgKnZwLFxcbi0tXFxubW0vdm1hLmMtMTUzLVxcdHZwLVxcdTAwM2V2bWEgPSB2bWE7XFxubW0vdm1hLmM6MTU0OlxcdHZwLVxcdTAwM2Vhbm9uX3ZtYSA9IHZtYS1cXHUwMDNlYW5vbl92bWE7XFxubW0vdm1hLmMtMTU1LVxcbi0tXFxubW0vdm1hLmMtMTcxLVxcdGlmICghdnAtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGFkanVzdClcXG5tbS92bWEuYzoxNzI6XFx0XFx0dnAtXFx1MDAzZWFub25fdm1hID0gYWRqdXN0LVxcdTAwM2Vhbm9uX3ZtYTtcXG5tbS92bWEuYy0xNzMtXFxuLS1cXG5tbS92bWEuYz00Mzk9c3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9yaWdodChzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLFxcbi0tXFxubW0vdm1hLmMtNDU5LVxcdHJldHVybiAhcHJldi1cXHUwMDNlYW5vbl92bWEgfHwgIW5leHQtXFx1MDAzZWFub25fdm1hIHx8XFxubW0vdm1hLmM6NDYwOlxcdFxcdHByZXYtXFx1MDAzZWFub25fdm1hID09IG5leHQtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jLTQ2MS19XFxuLS1cXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuLS1cXG5tbS92bWEuYy02MzItXFx0XFx0dm1hX2Fzc2VydF93cml0ZV9sb2NrZWQoZHN0KTtcXG5tbS92bWEuYzo2MzM6XFx0XFx0ZHN0LVxcdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxubW0vdm1hLmMtNjM0LVxcdFxcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcXG4tLVxcbm1tL3ZtYV9pbml0LmM9NDE9c3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS92bWFfaW5pdC5jLTQ3LVxcdGRlc3QtXFx1MDAzZXZtX2VuZCA9IHNyYy1cXHUwMDNldm1fZW5kO1xcbm1tL3ZtYV9pbml0LmM6NDg6XFx0ZGVzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYV9pbml0LmMtNDktXFx0ZGVzdC1cXHUwMDNldm1fcGdvZmYgPSBzcmMtXFx1MDAzZXZtX3Bnb2ZmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDoxOC4xMjU1ODA2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NjMzMzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGFub25fdm1hX2Nsb25lYCBhbmQgUG90ZW50aWFsIENvbmN1cnJlbmN5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGZvbGxvd2luZyB0aGUgY29kZSBmbG93IGZyb20gYGR1cF9hbm9uX3ZtYWAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBhbm9uX3ZtYV9jbG9uZWAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBgZHN0LVx1MDAzZWFub25fdm1hYCBpcyBpbml0aWFsbHkgYXNzaWduZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIHRvIGNyZWF0ZSBhIGNvcHkgb3Igc2hhcmUgYW4gYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBhbm9uX3ZtYWAgYW5kIGhvdyBpdCdzIGhhbmRsZWQgZHVyaW5nIHRoaXMgY2xvbmluZyBwcm9jZXNzLiBJbnNpZGUgYGFub25fdm1hX2Nsb25lYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYCBhbmQgYWRkcyBlbnRyaWVzIHRvIGBkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW5gLiBUaGF0IG1ha2VzIHNlbnNlIC0gcHJvcGFnYXRlIHRoZSBtYXBwaW5ncy4gQW5kIGl0IGxvY2tzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGJlZm9yZSB0aGUgbG9vcC4gQnV0LCBpZiBhIG1vZGlmaWNhdGlvbiBoYXBwZW5zIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgLCB0aGF0IGlzIGEgcG90ZW50aWFsIHJhY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgKm5vdCogbW9kaWZpZWQgYmV0d2VlbiB3aGVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIGlzIGNhbGxlZC4gVGhlIG9yaWdpbmFsIHRleHQgY29uZmlybXMgdGhpcyBpc24ndCBwb3NzaWJsZSwgYXMgdGhleSBhcmUgZGlmZmVyZW50IGluIHRoZSBzY29wZSBvZiBgZHVwX2Fub25fdm1hYC5cblxuSG93ZXZlciwgdGhlIG1vcmUgSSBsb29rIGF0IHRoZSBjb2RlLCBpdCBoaXRzIG1lLiBJbiB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIHRoZSBjb2RlIGlzIGxvY2tpbmcgdGhlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCBpdCBzZWVtcyBvZGQ6XG5cbiogICBUaGUgY29kZSBnZXRzIGBhY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWFgLlxuKiAgIEl0IHRoZW4gbG9ja3MgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO2AuXG4qICAgRmluYWxseSwgdGhlIGNvZGUgdW5sb2NrcyBgYWN0aXZlX2Fub25fdm1hYCB3aXRoIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGxvY2tpbmcgZXJyb3IgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY2hhbmdlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBIb3dldmVyLCBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsbHkgYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUgYXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgc29tZWhvdyBtb2RpZmllZCBpbiBiZXR3ZWVuP1xuXG5UaGUgYGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspYCBzdGF0ZW1lbnQgY2F0Y2hlcyBteSBleWUuIElmIHRoZSBvcGVyYXRpb24gaXMgYSBmb3JrIChgVk1BX09QX0ZPUktgKSwgYG1heWJlX3JldXNlX2Fub25fdm1hKGRzdCwgYW5vbl92bWEpYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBrbm93LCBkb2VzIHRoaXMgZnVuY3Rpb24gbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBBIG1vZGlmaWNhdGlvbiB0byBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCBsZWFkIHRvIGEgbG9jay91bmxvY2sgbWlzbWF0Y2ghIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDoyOS4xMDE5MTY2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuIDI3MTpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0LyogSWYgYWxyZWFkeSBwb3B1bGF0ZWQsIG5vdGhpbmcgdG8gZG8uKi9cXG4gMjc0OlxcdFxcdGlmIChkc3QtXFx1MDAzZWFub25fdm1hKVxcbiAyNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQvKlxcbiAyNzg6XFx0XFx0ICogV2UgcmV1c2UgYW4gYW5vbl92bWEgaWYgYW55IGxpbmtpbmcgVk1BcyB3ZXJlIHVubWFwcGVkIGFuZCBpdCBoYXNcXG4gMjc5OlxcdFxcdCAqIG9ubHkgYSBzaW5nbGUgY2hpbGQgYXQgbW9zdC5cXG4gMjgwOlxcdFxcdCAqL1xcbiAyODE6XFx0XFx0aWYgKGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMgXFx1MDAzZSAwKVxcbiAyODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODM6XFx0XFx0aWYgKGFub25fdm1hLVxcdTAwM2VudW1fY2hpbGRyZW4gXFx1MDAzZSAxKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxuIDI4NzpcXHRcXHRhbm9uX3ZtYS1cXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6MjkuMTAyMDg1MTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODQwOTMxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBEYXRhIFJhY2VzIGluIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgYW5vbl92bWFgIHN0cnVjdHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHRoZSBtb2RpZmljYXRpb24gb2YgYGRzdC1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiB3aGF0IGlmIGBzcmNgIGFuZCBgZHN0YCBhcmUgdGhlIHNhbWU/IEJ1dCwgd2FpdCwgdGhhdCdzIG5vdCBwb3NzaWJsZSBpbiBgYW5vbl92bWFfZm9ya2A7IGBzcmNgIGFuZCBgZHN0YCBhcmUgZGlzdGluY3QuXG5cbk5leHQgdGhvdWdodDogQ291bGQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBpbnRlcmZlcmVzPyBJIGNvbnNpZGVyZWQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJ1dCB0aGF0IHRhcmdldHMgdGhlIGBhdmMtXHUwMDNlYW5vbl92bWFgIGFuZCBgYXZjLVx1MDAzZXZtYWAsIG5vdCBkaXJlY3RseSBgc3JjLVx1MDAzZWFub25fdm1hYC4gU28sIHRoYXQncyBub3QgdGhlIGlzc3VlLlxuXG5Ob3cgSSdtIGZvY3VzaW5nIG9uIGNvbmN1cnJlbmN5LiBDb3VsZCBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIGBzcmNgIGJlIGEgcHJvYmxlbT8gSWYgc28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBkYXRhIHJhY2UsIHJpZ2h0PyBBaCwgYW5kIEtDU0FOIChLZXJuZWwgQ29uY3VycmVuY3kgU2FuaXRpemVyKSBtaWdodCBmbGFnIGEgZGF0YSByYWNlIGV2ZW4gaWYgdGhlIHZhbHVlIGRvZXNuJ3QgY2hhbmdlISBUaGF0J3MgaXQhIEkgcmVjYWxsIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIGFjdHVhbGx5ICpyZWFkKiB0d2ljZTogb25jZSBhdCB0aGUgYmVnaW5uaW5nIHRvIGluaXRpYWxpemUgYGFjdGl2ZV9hbm9uX3ZtYWAsIGFuZCB0aGVuIGxhdGVyIHRvIGFjcXVpcmUgYSBsb2NrLlxuXG5UaGUgY29tcGlsZXIgY291bGQgcG90ZW50aWFsbHkgcmVsb2FkIHRoZSB2YWx1ZS4gQnV0LCBtb3JlIGltcG9ydGFudGx5LCBpZiBhbm90aGVyIHRocmVhZCBpcyBwb3RlbnRpYWxseSB3cml0aW5nIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdoaWxlIHRoaXMgaXMgaGFwcGVuaW5nLCBLQ1NBTiBpcyBnb2luZyB0byBzcXVhd2ssIGV2ZW4gaWYgdGhlIHJlYWQgdmFsdWUgcmVtYWlucyB0aGUgc2FtZS4gVGhlIHNlY29uZCByZWFkIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGZvciB0aGUgbG9jaywgdGhhdCdzIHRoZSB0ZWxsLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBiZWluZyByZWFkIHR3aWNlLCBLQ1NBTiB3aWxsIGNvbXBsYWluIGlmIHRoZXJlJ3MgYSBjb25jdXJyZW50IHdyaXRlLlxuXG5TbywgaWYgdGhlcmUncyAqbm8qIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdvbid0IGZsYWcgYW55dGhpbmcuIEJ1dCBpZiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdpbGwgZmxhZyB0aGUgZG91YmxlIHJlYWQuXG5cbk9rYXksIGlzIGBzcmMtXHUwMDNlYW5vbl92bWFgIG1vZGlmaWVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWA/IEJldHRlciBjaGVjayB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayB0aGVyZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjM2LjI4NjE4MTE3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdCBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0LyogVGhlIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLiAqL1xcbiAyNDA6XFx0XFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy1cXHUwMDNldm1fbW0pO1xcbiAyNDE6XFx0XFx0LyogSWYgbm90IGEgZm9yayB0aGVuIG11c3QgYmUgb24gc2FtZSBtbS4gKi9cXG4gMjQyOlxcdFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX0ZPUksgXFx1MDAyNlxcdTAwMjYgZHN0LVxcdTAwM2V2bV9tbSAhPSBzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0LyogSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBkbyBzcmMtXFx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXFxuIDI0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cXHUwMDNlYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc3JjLVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hKTtcXG4gMjQ3OlxcdFxcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXFxuIDI0ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ5OlxcdFxcdC8qXFxuIDI1MDpcXHRcXHQgKiBPbiBmb3JrLCBkc3QtXFx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcXG4gMjUxOlxcdFxcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxcbiAyNTI6XFx0XFx0ICovXFxuIDI1MzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0LVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hICE9IHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIEVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gYWJvdmUgLSBpZiBub3QgYSBuby1vcCwgd2Ugc2hvdWxkIGV4cGVjdFxcbiAyNTY6XFx0XFx0ICogZHN0LVxcdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcXHUwMDI2XFx1MDAyNiBzcmMtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2XFxuIDI1OTpcXHRcXHRcXHRcXHQhZHN0LVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDI2MDpcXHRcXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xcbiAyNjE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDI2MjpcXHRcXHRcXHRcXHQhbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2c3JjLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xcbiAyNjM6XFx0I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gMjY0OlxcdFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIDI2NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgXFx1MDAyNlxcdTAwMjZcXG4gMjY2OlxcdFxcdFxcdFxcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcXG4gMjY3OlxcdCNlbmRpZlxcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjM2LjI4NjMyMzI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE1ODc1NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBgYW5vbl92bWFfY2xvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGl0ICpzaG91bGRuJ3QqIGJlIG1vZGlmeWluZyBgc3JjLVx1MDAzZWFub25fdm1hYCBkaXJlY3RseS4gQnV0IHRoZW4sIG15IG1pbmQgcmFjZXMg4oCTIHdoYXQgaWYgYW5vdGhlciB0aHJlYWQgd2VyZSB0byBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IFRoYXQgd291bGQgYmUgYSBzZXJpb3VzIGJ1ZywgZ2l2ZW4gd2UgaG9sZCB0aGUgbW1hcCBsb2NrLCByaWdodD8gVGhlIHN5c3RlbSBzaG91bGQgbm90IGFsbG93IHRoZSBzdGF0ZSB0byBjaGFuZ2Ugd2l0aCB0aGUgbG9jayBpbiBwbGFjZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgYml0LiBJcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBzcmNgIGl0c2VsZiB0byBiZSBtb2RpZmllZCBieSBhbm90aGVyIHRocmVhZD8gVGhhdCBzZWVtcyB1bmxpa2VseSwgYnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4gT2theSwgc28gbG9va2luZyBhdCB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbiBpdHNlbGYsIEkgc2VlIHRoaXM6XG5cbmBgYGNcblx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuLi4uXG5cdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuYGBgXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGJlaW5nIGNhbGxlZCBvbiBgc3JjLVx1MDAzZWFub25fdm1hYC4gSWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgcmVhZCB0d2ljZSwgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIGl0LCBhbmQgaXQgaGFwcGVucyB0byBiZSBtb2RpZmllZCBpbiBiZXR3ZWVuLCBpdCB3b3VsZCBsb2NrIG9uZSB2ZXJzaW9uIG9mIHRoZSBhbm9uX3ZtYSBhbmQgdW5sb2NrIGFub3RoZXIhIFRoYXQgc291bmRzIHJlYWxseSBiYWQuIEhvd2V2ZXIsIGlmIGl0J3Mgbm90IG1vZGlmaWVkLCB0aGVuIHdoeSBpcyB0aGUgdmFyaWFibGUgY2hhbmdlZCBhdCBhbGw/IEl0IGZlZWxzIGxpa2UganVzdCBhIGNsZWFudXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgd291bGRuJ3QgYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSdtIHByb2JhYmx5IG1pc3Npbmcgc29tZXRoaW5nLlxuXG5CdXQgdGhlbiwgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIGBzcmNgIGlzIGFjdHVhbGx5IGFuIGFsaWFzIGZvciBgZHN0YD8gSWYgYHNyYyA9PSBkc3RgLCB0aGVuIGBkc3QtXHUwMDNlYW5vbl92bWFgICppcyogbW9kaWZpZWQgaW5zaWRlIGBtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKWAuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nISBJZiBgc3JjID09IGRzdGAsIHRoZW4sIHllcywgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmlzKiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBTbywgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKWAgd291bGQgbG9jayB0aGUgKm9sZCogYGFub25fdm1hYCBwb3RlbnRpYWxseSwgYnV0IHRoZW4gSSByZW1lbWJlciDigJMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGlzIGNhbGxlZCBCRUZPUkUgdGhhdCBsb29wLlxuXG5MZXQncyBsb29rIGF0IHRoZSBmdWxsIGNvZGUgYmxvY2s6XG5cbmBgYGNcblx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG5cdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcblxuXHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG5cdFx0aWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylcblx0XHRcdG1heWJlX3JldXNlX2Fub25fdm1hKGRzdCwgYW5vbl92bWEpO1xuXHR9XG5cblx0aWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSylcblx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XG5cblx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5gYGBcblxuU28sIG5vdyBJIHNlZSB0aGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCAqaXMqIGNhbGxlZCAqYmVmb3JlKiB0aGUgbG9vcCB3aGVyZSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIGlzIGNhbGxlZCwgYW5kIGV2ZW4gaWYgYHNyYyA9PSBkc3RgLCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWFkIGJlZm9yZSB0aGUgbW9kaWZpY2F0aW9uLiBPa2F5LCB0aGF0J3MgZ29vZC5cblxuQnV0LCB3YWl0Li4uIGNvdWxkIGBkc3QtXHUwMDNlYW5vbl92bWFgIGJlIG1vZGlmaWVkIGJ5IHRoaXMgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrK2A/IElmIGBzcmMgPT0gZHN0YCwgd291bGQgdGhlIHZhbHVlIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGdldCByZWFkIGFnYWluIGluIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgPyBObywgYmVjYXVzZSBgYW5vbl92bWFfbG9ja193cml0ZWAgaXMgc3RpbGwgY2FsbGVkIGJlZm9yZSB0aGF0IGxpbmUgb2YgY29kZS5cblxuT2theSwgaXMgaXQgcG9zc2libGUgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBldmFsdWF0ZWQgKndpdGhpbiogYGFub25fdm1hX2xvY2tfd3JpdGVgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGZ1bmN0aW9uJ3MgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6NDcuNDQ1MDgxNDU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTU1MjUxNDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgYW5vbl92bWFfbG9ja193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjQ3LjgwMDYxNDU2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg5MDc1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYGFub25fdm1hX2xvY2tfd3JpdGVgKipcblxuQWxyaWdodCwgdGhlIHF1ZXJ5IGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMsIGFuZCB0aGUgXCJsb2NrX3dyaXRlXCIgcGFydCBpbXBsaWVzIGEgd3JpdGUtcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgYW5vbnltb3VzIG1lbW9yeSByZWdpb25zLCBsaWtlbHkgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gKHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZNQSBpdHNlbGYpLCBvciBwZXJoYXBzIGV2ZW4gd2hlbiBoYW5kbGluZyBjb3B5LW9uLXdyaXRlIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyB1c2VkIHRvIGNvbmZpcm0gdGhvc2UgaW5pdGlhbCBhc3N1bXB0aW9ucy4gVGltZSB0byBoaXQgdGhlIGNvZGUgc2VhcmNoLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDo1MS4wODk2OTMxNzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI5MTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MS1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0MDcyOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3My1cXHRcXHRtYXBwaW5nID0gTlVMTDtcXG4tLVxcbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMjE3LVxcbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxubW0vaW50ZXJuYWwuaC0yMTkte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEyNzg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM0OS1cXG5tbS9raHVnZXBhZ2VkLmM6MTM1MDpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL2todWdlcGFnZWQuYy0xMzUxLVxcdGFub25fdm1hX2xvY2tlZCA9IHRydWU7XFxuLS1cXG5tbS9tcmVtYXAuYz0xNDM9c3RhdGljIHZvaWQgdGFrZV9ybWFwX2xvY2tzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbXJlbWFwLmMtMTQ3LVxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKVxcbm1tL21yZW1hcC5jOjE0ODpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL21yZW1hcC5jLTE0OS19XFxuLS1cXG5tbS9ybWFwLmM9MTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuLS1cXG5tbS9ybWFwLmMtMTMyLVxcdGlmIChyd3NlbV9pc19sb2NrZWQoXFx1MDAyNmFub25fdm1hLVxcdTAwM2Vyb290LVxcdTAwM2Vyd3NlbSkpIHtcXG5tbS9ybWFwLmM6MTMzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0xMzQtXFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMDctXFxubW0vcm1hcC5jOjIwODpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG5tbS9ybWFwLmMtMjA5LVxcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xcbi0tXFxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQzNS1cXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xcbm1tL3JtYXAuYzo0MzY6XFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQzNy1cXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuLS1cXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00OTItXFxubW0vcm1hcC5jOjQ5MzpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQ5NC1cXG4tLVxcbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy02ODktXFx0XFx0ICogYW5kIGJhaWwgLS0gY2FuJ3Qgc2ltcGx5IHVzZSBwdXRfYW5vbl92bWEoKSBiZWNhdXNlXFxubW0vcm1hcC5jOjY5MDpcXHRcXHQgKiB3ZSdsbCBkZWFkbG9jayBvbiB0aGUgYW5vbl92bWFfbG9ja193cml0ZSgpIHJlY3Vyc2lvbi5cXG5tbS9ybWFwLmMtNjkxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1hLmM9MjkxPXN0YXRpYyB2b2lkIHZtYV9wcmVwYXJlKHN0cnVjdCB2bWFfcHJlcGFyZSAqdnApXFxuLS1cXG5tbS92bWEuYy0zMTMtXFx0aWYgKHZwLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL3ZtYS5jOjMxNDpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZwLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzE1LVxcdFxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcHJlX3VwZGF0ZV92bWEodnAtXFx1MDAzZXZtYSk7XFxuLS1cXG5tbS92bWEuYz0zMTE3PWludCBleHBhbmRfdXB3YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vdm1hLmMtMzE2NS1cXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXFxubW0vdm1hLmM6MzE2NjpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL3ZtYS5jLTMxNjctXFxuLS1cXG5tbS92bWEuYz0zMjAzPWludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMjQ0LVxcdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cXG5tbS92bWEuYzozMjQ1OlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzI0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6NTEuMjA2OTkwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4MDU4NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkRpZ2dpbmcgaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgb3V0IGlzIHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGltbWVkaWF0ZWx5LiBJdCdzIHByb2JhYmx5IHJlbGF0aXZlbHkgc2hvcnQgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gVGhlIGNvbXBpbGVyIGlzIGdvaW5nIHRvIHRyeSB0byBzdWJzdGl0dXRlIHRoZSBmdW5jdGlvbidzIGNvZGUgZGlyZWN0bHkgd2hlcmV2ZXIgaXQncyBjYWxsZWQgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgYW5kIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQW5kIHRoZSBmYWN0IHRoYXQgaXQncyBkZWZpbmVkIGluIGBtbS9pbnRlcm5hbC5oYCBjb25maXJtcyBteSBpbml0aWFsIGh5cG90aGVzaXMgdGhhdCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHdvcmtpbmdzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGxvY2tpbmcgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDo1Ny4zODc1NzkzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcm9vdC1cXHUwMDNlcndzZW0pO1xcbiAyMjE6XFx0fVxcbiAyMjI6XFx0XFxuIDIyMzpcXHRzdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV90cnlsb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDIyNDpcXHR7XFxuIDIyNTpcXHRcXHRyZXR1cm4gZG93bl93cml0ZV90cnlsb2NrKFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcm9vdC1cXHUwMDNlcndzZW0pO1xcbiAyMjY6XFx0fVxcbiAyMjc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjU3LjM4NzcwMzY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjk4NTcwMzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYGFub25fdm1hX2Nsb25lYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgdXNlIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGVgIGZ1bmN0aW9uLiBUaGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgcmVhZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYCB0d2ljZSBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLCBvciBpbmRpY2F0ZSBhIHJlYWwgYnVnIGlmIGl0J3MgbW9kaWZpYWJsZS4gTGV0J3MgdHJhY2UgaXQgY2FyZWZ1bGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc3JjYCBwb2ludGVyIGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIGJ5IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBhbmQgaW5kZWVkLCB0aGF0IGZ1bmN0aW9uIHRvdWNoZXMgYGF2Yy1cdTAwM2V2bWFgIGFuZCBgYXZjLVx1MDAzZWFub25fdm1hYCwgbm90IHRoZSBzb3VyY2UuICBXYWl0LCBpZiBgc3JjID09IGRzdGAsIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgd291bGQgY3JlYXRlIGFuIGluZmluaXRlIGxvb3AsIHNvIHRoZSBjb21waWxlciB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGlzLCBidXQgdGhlIGZ1bmN0aW9uIHdvdWxkIGJlIHZlcnkgcHJvYmxlbWF0aWMuICBTbyBgc3JjYCBjYW5ub3QgYmUgZXF1YWwgdG8gYGRzdGAuXG5cbkkgd2FzIGFsc28gYXNraW5nIG15c2VsZiBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4gYmUgbW9kaWZpZWQgZWxzZXdoZXJlIGluIGBhbm9uX3ZtYV9jbG9uZWAuICBJdCBzZWVtcyBuby4gVGhlIGNvbXBpbGVyIHJlbG9hZHMgbWlnaHQgYmUgYSBwcm9ibGVtLCBidXQgaXQncyBub3QuIFRoZW4sIGl0IGhpdHMgbWUgdGhhdCBgZHVwX2Fub25fdm1hYCBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiBCdXQsIGhlcmUgYHNyY2AgYW5kIGBkc3RgIGFyZSBkaWZmZXJlbnQuIEFsc28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBzcmNgIGlzIGZyZWVkLCBidXQgd2UgYXJlIGhvbGRpbmcgdGhlIG1tYXAgbG9jay5cblxuU28gdGhlIG1haW4gdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBub3QgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgY29kZSBjb21tZW50cyBpbiBgYW5vbl92bWFfY2xvbmVgIHRhbGsgYWJvdXQgdGhlIG1tYXAgbG9jay4gSXQgc2F5cyBcIkVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2tcIi4gVGhpcyBzZWVtcyBwcmV0dHkgZGVmaW5pdGl2ZS4gIFdpdGggdGhlIG1tYXAgd3JpdGUgbG9jaywgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaGF0IGxvY2sgaXMgaGVsZCBkdXJpbmcgYFZNQV9PUF9TUExJVGAgYW5kIGluIGBfX3NwbGl0X3ZtYWAsIHNvIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHByb2JsZW0uXG5cbk5vdywgSSB3YXMgdGhpbmtpbmcgYWJvdXQgYHBhZ2VfZmF1bHRgLiBgcGFnZV9mYXVsdGAgdXNlcyB0aGUgbW1hcCByZWFkIGxvY2suIElmIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYHBhZ2VfZmF1bHRgIGNhbid0IHJ1biBjb25jdXJyZW50bHkuIEJ1dCwgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjb25maXJtcyB0aGF0IHRoZSB3cml0ZSBsb2NrIGlzIEFMV0FZUyBoZWxkLCBzbyBvdGhlciB0aHJlYWRzIGNhbm5vdCBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIEl0IGlzIGp1c3QgYSBgdm9pZGAgdGhhdCBvbmx5IGRvZXMgYSBgVk1fV0FSTl9PTl9PTkNFYC5cblxuV2FpdCwgY291bGQgc29tZXRoaW5nIGVsc2UgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBOby4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhbHdheXMgaW4gYGRzdC1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBtYWluIHF1ZXN0aW9uIGlzIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCwgc28gaXQgc2hvdWxkIGJlIGZpbmUuICBOb3csIHRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMuXG5cbkJ1dCB0aGVuIEkgcmVhbGl6ZS4gV2FpdCEgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzOiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIGFzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGluIHRoZSBmdW5jdGlvbi5cblxuU28sIHVubGVzcyBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4gY2hhbmdlLCB0aGlzIGRvZXNuJ3QgbWF0dGVyLiBUaGUgbmV4dCB0aGluZyBJIHJlYWxpemVkIGlzIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGNvdWxkIGhhdmUgYSBwcm9ibGVtIGlmIGFub3RoZXIgdGhyZWFkIGlzIG1vZGlmeWluZyB0aGUgdmFyaWFibGUgaW4gdGhlIGxvb3AuXG5cblRoZSBzb2x1dGlvbiBpcyBgQ09ORklHX1BFUl9WTUFfTE9DS2AsIG5vdyBJJ20gdGhpbmtpbmcgd2hldGhlciBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrISAgSXQgbG9va3MgbGlrZSB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHBhZ2UgZmF1bHRzLCB1c2luZyB0aGUgcGVyLVZNQSBsb2NrLCBjYW4gbW9kaWZ5IGEgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUxOjIwLjM3MzQxMDEwOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5NzYwMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIxMS1cXHRpZiAobGlrZWx5KCF2bWEtXFx1MDAzZWFub25fdm1hKSkge1xcbm1tL3JtYXAuYzoyMTI6XFx0XFx0dm1hLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0yMTMtXFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUxOjIxLjI3MzE3Njc2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NzIxMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhbmQgVk1BIExvY2tpbmcqKlxuXG5Pa2F5LCB3YWl0IGEgbWludXRlLiBMb29raW5nIGF0IHRoaXMgY29kZSwgYF9fYW5vbl92bWFfcHJlcGFyZWAgY2xlYXJseSBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgc3RydWN0dXJlLiBUaGF04oCZcyBhIGtleSBwaWVjZS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCByZWFsbHkgbWF0dGVycyBmb3Igc3RhYmlsaXR5IGFuZCBjb25jdXJyZW5jeSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgaXMgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbiwgYF9fYW5vbl92bWFfcHJlcGFyZWAsIGlzIG9wZXJhdGluZyB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgcGVyLVZNQSBsb2NrLiBJZiBpdCdzIG5vdCwgd2UgaGF2ZSBhIHNlcmlvdXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFJpZ2h0LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYW5vbl92bWFfcHJlcGFyZWAgaXRzZWxmIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgcmlnaHQgbG9ja3MgYXJlIGJlaW5nIGhlbGQgd2hlbiBpdCBtb2RpZmllcyB0aGUgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuIEknbGwgdmVyaWZ5IHRoaXMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyNC43MTA5MDA0ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTk5MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0yNjA9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSk7XFxubW0vaW50ZXJuYWwuaDoyNjE6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmgtMjYyLXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTI2ND1zdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0yNjgtXFxubW0vaW50ZXJuYWwuaDoyNjk6XFx0cmV0dXJuIF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xcbm1tL2ludGVybmFsLmgtMjcwLX1cXG4tLVxcbm1tL21lbW9yeS5jPTM3OTM9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM4MTAtICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxubW0vbWVtb3J5LmM6MzgxMTogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxubW0vbWVtb3J5LmMtMzgxMi0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbi0tXFxubW0vbWVtb3J5LmM9MzgxOD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM4MjgtXFx0fVxcbm1tL21lbW9yeS5jOjM4Mjk6XFx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxcbm1tL21lbW9yeS5jLTM4MzAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfT09NO1xcbi0tXFxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMTU5LS8qKlxcbm1tL3JtYXAuYzoxNjA6ICogX19hbm9uX3ZtYV9wcmVwYXJlIC0gYXR0YWNoIGFuIGFub25fdm1hIHRvIGEgbWVtb3J5IHJlZ2lvblxcbm1tL3JtYXAuYy0xNjEtICogQHZtYTogdGhlIG1lbW9yeSByZWdpb24gaW4gcXVlc3Rpb25cXG4tLVxcbm1tL3JtYXAuYy0xODQtICovXFxubW0vcm1hcC5jOjE4NTppbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3JtYXAuYy0xODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyNC43NjI5MDUwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk4NzQwMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBfX3ZtZl9hbm9uX3ByZXBhcmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX192bWZfYW5vbl9wcmVwYXJlYCBmdW5jdGlvbiwgYW5kIHRoZSBjb21tZW50IGlzIGltbWVkaWF0ZWx5IHRocm93aW5nIHVwIGEgZmxhZy4gSXQgc2F5cyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKm9ubHkqIHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGxvY2tzLiBJdCBhbHNvIHNheXMgdGhhdCBhIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlIGBtbWFwX2xvY2tgIGhlbGQuIFdoeT8gQWgsIGl0J3MgYmVjYXVzZSBgX19hbm9uX3ZtYV9wcmVwYXJlKClgIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyAqYWRqYWNlbnQqIFZNQXMgdG8gc2VlIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYGFub25fdm1hYC4gVGhhdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgdHJ5aW5nIHRvIGxvb2sgYXQgbmVpZ2hib3JpbmcgbWVtb3J5IHJlZ2lvbnMgd2hpbGUgaG9sZGluZyBvbmx5IGEgcGVyLVZNQSBsb2NrLiBJdCdzIG5vdCBzYWZlLlxuXG5TbywgaWYgYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgdW5zYWZlIHRvIGNhbGwgdW5kZXIgdGhlIHBlci1WTUEgbG9jaywgZG9lcyBgdm1mX2Fub25fcHJlcGFyZWAgdGhlbiByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCBpZiBjYWxsZWQgdW5kZXIgdGhlIHBlci1WTUEgbG9jaz8gSXQgc2VlbXMgbGlrZWx5LiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyOS41NjE2NDc5MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MTA6XFx0ICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxuMzgxMTpcXHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxuMzgxMjpcXHQgKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbjM4MTM6XFx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXFxuMzgxNDpcXHQgKlxcbjM4MTU6XFx0ICogUmV0dXJuOiAwIGlmIGZhdWx0IGhhbmRsaW5nIGNhbiBwcm9jZWVkLiAgQW55IG90aGVyIHZhbHVlIHNob3VsZCBiZVxcbjM4MTY6XFx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cXG4zODE3OlxcdCAqL1xcbjM4MTg6XFx0dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMzgxOTpcXHR7XFxuMzgyMDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbjM4MjE6XFx0XFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbjM4MjI6XFx0XFxuMzgyMzpcXHRcXHRpZiAobGlrZWx5KHZtYS1cXHUwMDNlYW5vbl92bWEpKVxcbjM4MjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzgyNTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODI2OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzgyNzpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgyODpcXHRcXHR9XFxuMzgyOTpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzgzMDpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzgzMTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuMzgzMjpcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbjM4MzM6XFx0XFx0cmV0dXJuIHJldDtcXG4zODM0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTE6MjkuNTYxOTMxMjkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTY0NDc1NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYW5vbl92bWFfY2xvbmVgIGFuZCBQb3RlbnRpYWwgRGF0YSBSYWNlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byBgc3JjLVx1MDAzZWFub25fdm1hYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrLCBpbXBseWluZyB0aGF0IGB2bWEtXHUwMDNlYW5vbl92bWFgIGlzbid0IG1vZGlmaWVkIHVuZGVyIGp1c3QgdGhlIHBlci1WTUEgbG9jay4gVGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLCBzdWdnZXN0aW5nIHRoYXQgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYCBjb25jdXJyZW50bHkuXG5cbkJ1dCB3YWl0LCB3aHkgd2FzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNoYW5nZWQgdG8gYGFjdGl2ZV9hbm9uX3ZtYWA/IExldCdzIHRyYWNlIGl0IHRocm91Z2g6IGBzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtgLiBIbW0sIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgTlVMTD8gVGhlIGNoZWNrIGBpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkgcmV0dXJuIDA7YCBoYW5kbGVzIHRoYXQgY2FzZSBlYXJseS4gU28sIGF0IGxlYXN0IGluaXRpYWxseSwgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgTlVMTC5cblxuQ291bGQgc29tZXRoaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgIGl0c2VsZiBhbHRlciBgc3JjLVx1MDAzZWFub25fdm1hYD8gVGhlIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gc2VlbXMgaW5ub2N1b3VzLCBqdXN0IGEgYnVuY2ggb2YgYFZNX1dBUk5fT05fT05DRWAgY2FsbHMuIEl0IGNhbid0IGNoYW5nZSBpdC4gVGhlbiB3aGF0IGFib3V0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gPyBDb3VsZCB0aGF0IG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQgb3BlcmF0ZXMgb24gYGRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAsIG5vdCBgc3JjLVx1MDAzZWFub25fdm1hYC4gSXQgaXMgbG9va2luZyBhdCB0aGUgY2hhaW4gd2l0aGluIGBzcmNgLCBidXQgdGhhdCBpcyBhIGNoYWluIG9mIGBhbm9uX3ZtYWAgb2JqZWN0cy5cblxuSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHNyY2AgY291bGQgYmUgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYSBsb29wIG1pZ2h0IGhhcHBlbiB3aXRoIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBgZHVwX2Fub25fdm1hYCBmdW5jdGlvbiBzZXRzIGBkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWFgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZWAsIHNvIHRoZSBsb2NrIHdvdWxkIHByZXZlbnQgYW55IGlzc3Vlcy4gTG9va2luZyBpbnNpZGUgYGFub25fdm1hX2Nsb25lYCdzLCBhZnRlciB0aGUgY2xvbmUsIGBkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzKytgIGlzIGV4ZWN1dGVkLiBJbiB0aGlzIGNhc2UsIGBzcmMtXHUwMDNlYW5vbl92bWFgJ3MgYG51bV9hY3RpdmVfdm1hc2AgaXMgbW9kaWZpZWQgYW5kIHRoaXMgY291bGQgZ2l2ZSBhIGZhbHNlIHNlbnNlIG9mIGEgZGF0YSByYWNlLiBIb3dldmVyLCB0aGlzIG9ubHkgbW9kaWZpZXMgYSB2YWx1ZSwgbm90IHRoZSBwb2ludGVyIGl0c2VsZi5cblxuVGhlbiB0aGUga2V5IHF1ZXN0aW9uOiBDb3VsZCBhIEtDU0FOIGNvbXBsYWludCBiZSBkdWUgdG8gYW5vdGhlciB0aHJlYWQgcmVhZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYD8gUmVtZW1iZXIsIGBhbm9uX3ZtYV9jbG9uZWAgcmVhZHMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgdHdpY2UuIEhvd2V2ZXIsIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBzaW5jZSB3ZSBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2shIFRoZSBgYW5vbl92bWFfZm9ya2AgZnVuY3Rpb24gZG9lcyBjYWxsIGBhbm9uX3ZtYV9jbG9uZWAsIGhvd2V2ZXIgdGhlIGBzcmNgIFZNQSBpcyBsb2NrZWQuIFNvIHRoZSBwYXJlbnQgY2Fubm90IG1vZGlmeSBpdC5cblxuU28sIGluIHRoZW9yeSwgaWYgYSBkaWZmZXJlbnQgdGhyZWFkIGlzIHJlYWRpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aG91dCBhIGxvY2ssIHRoZXJlIG1pZ2h0IGJlIGEgZGF0YSByYWNlLiBCdXQsIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYW5kIHRoZSBwYXJlbnQgaXMgYWxzbyBsb2NrZWQuIFNvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uXG5cbkxldCBtZSBzZWFyY2ggZm9yIHRoZSBjb21taXQgbWVzc2FnZS4gQWhhISBUaGUgY29tbWl0IGA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljYCBjaGFuZ2VzIHRoZSBsb2NrLiBXaHkgd2FzIHRoYXQgbmVlZGVkPyBMZXQncyBsb29rIGFnYWluOlxuYGBgY1xuXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbi4uLlxuXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5gYGBcblxuV2hhdCBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBOVUxMIGF0IHRoZSB0aW1lIG9mIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYD9cbkhvdyBjb3VsZCBpdCBiZSBOVUxMP1xuSWYgYHNyY2AgaXMgYGRzdGA/IE5vLlxuSWYgYHNyY2AgaXMgbW9kaWZpZWQ/XG5cbkxvb2tpbmcgYXQgY2FsbHMgdG8gYGFub25fdm1hX2Nsb25lYCwgdGhlIGBzcmNgIGFuZCBgZHN0YCB2bV9hcmVhcyBhcmUgYWx3YXlzIGRpZmZlcmVudC5cblNvIGBzcmNgIG5ldmVyIGNoYW5nZXMuIFRodXMsIGBzcmMtXHUwMDNlYW5vbl92bWFgIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZC4gQW5kIHRoZSBjaGFuZ2UgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTE6NTQuMTI2NDA4OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMzIxOlxcdFxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHQvKlxcbiAzMzI6XFx0XFx0ICogQWxsb2NhdGUgQVZDcy4gV2UgZG9uJ3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXFxuIDMzMzpcXHRcXHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xcbiAzMzQ6XFx0XFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cXG4gMzM1OlxcdFxcdCAqXFxuIDMzNjpcXHRcXHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxcbiAzMzc6XFx0XFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVxcdTAwM2V2bV9tbSBhbmQgZHN0IGlzXFxuIDMzODpcXHRcXHQgKiBub3QgeWV0IGFjY2Vzc2libGUgdG8gb3RoZXIgdGhyZWFkcyBzbyB0aGVyZSdzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxcbiAzMzk6XFx0XFx0ICogdW5saW5rZWQgQVZDJ3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNDI6XFx0XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM0MzpcXHRcXHRcXHRpZiAoIWF2YylcXG4gMzQ0OlxcdFxcdFxcdFxcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gMzUxOlxcdFxcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM1NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcXHUwMDI2ZHN0LVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcXG4gMzU1OlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXFx1MDAzZWFub25fdm1hO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRcXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAob3BlcmF0aW9uID09IFZNQV9PUF9GT1JLKVxcbiAzNTk6XFx0XFx0XFx0XFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XFxuIDM2MDpcXHRcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXFxuIDM2MzpcXHRcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM2NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0IGVub21lbV9mYWlsdXJlOlxcbiAzNjk6XFx0XFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MTo1NC4xMjY1Njc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDc2MDUxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VzcGVjdGVkIERhdGEgUmFjZSoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhpcyBwYXRjaCBjaGFuZ2VkIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBpcyB0aGUgc2FtZSBhcyBgc3JjLVx1MDAzZWFub25fdm1hYC4gU28sIHdoeSB0aGUgY2hhbmdlP1xuXG5GaXJzdCwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBvYnZpb3VzLiBDb3VsZCBgc3JjLVx1MDAzZWFub25fdm1hYCBiZSBtb2RpZmllZCBkaXJlY3RseSBieSBzb21lIG90aGVyIGZ1bmN0aW9uIGxpa2UgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzYCwgb3IgYGFub25fdm1hX2NoYWluX2FsbG9jYD8gTm8sIHRob3NlIGRvbid0IHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLlxuXG5Ob3csIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24ga2VlcHMgcG9wcGluZyBpbnRvIG15IGhlYWQuIElzIGl0IHBvc3NpYmxlIGEgY29uY3VycmVudCB0aHJlYWQgY291bGQgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBObywgd2FpdCEgSSd2ZSBiZWVuIHRocm91Z2ggdGhpcyBiZWZvcmUuIFdlICpzaG91bGQqIGJlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYCwgd2hpY2ggd291bGQgcHJldmVudCBhbnkgb3RoZXIgdGhyZWFkIGZyb20gbW9kaWZ5aW5nIGl0IGNvbmN1cnJlbnRseS5cblxuQnV0Li4uIGhhbmcgb24uIFRoZSBjb21tZW50IGhlcmUuLi4gc2F5cyBzb21ldGhpbmcgYWJvdXQgYWxsb2NhdGluZyBBVkNzLiBJdCBzdGF0ZXMsIGFuZCBJIHF1b3RlLCBcIldlIGRvbid0IG5lZWQgYW4gYW5vbl92bWEgbG9jayBmb3IgdGhpcyBhcyB3ZSBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZyBhbm9uX3ZtYSBzdGF0aXN0aWNzLlwiIE9rYXksIHNvIHRoZSBsb2NrIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCogZm9yIEFWQyBhbGxvY2F0aW9uIGl0c2VsZi4gVGhlIGNvbW1lbnQgdGhlbiBzdGF0ZXMgZWl0aGVyIGBzcmNgLCBgZHN0YCBoYXZlIHRoZSBzYW1lIG1tIHdoaWNoIHdlIGhvbGQgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jaywgb3IgaWYgZm9ya2luZywgd2UgaG9sZCBpdCBvbiBgc3JjLVx1MDAzZXZtX21tYC5cblxuU28sIGluICphbGwqIGNhc2VzIOKAkyB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgbWVtb3J5IG1hcCBvciB3ZSBhcmUgZm9ya2luZyDigJMgd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhhdCBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAuIFNvLCBubyBvdGhlciB0aHJlYWQgc2hvdWxkIGJlIGFibGUgdG8gdG91Y2ggYHNyYy1cdTAwM2Vhbm9uX3ZtYWAhXG5cblRoZW4gd2h5IHRoZSBjaGFuZ2U/IElzIHRoaXMgYSBLQ1NBTiBkYXRhIHJhY2UgZGV0ZWN0aW9uIHRoaW5nPyBLQ1NBTiBwaWNrcyB1cCBhIHJhY2Ugd2hlbiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgcmVhZCBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBidXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgY29uY3VycmVudCB3cml0ZSBoZXJlISBUaGUgd3JpdGUgbG9jayAqc2hvdWxkKiBndWFyYW50ZWUgdGhhdC5cblxuT2theSwgbGV0IG1lIHRoaW5rLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIHdyaXR0ZW4gYnkgYSB0aHJlYWQgdGhhdCBkb2VzICpub3QqIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jaz8gVGhpcyBtYWtlcyBtZSB0aGluayAtIGlzIHRoZXJlIGFueSBjb2RlIGluIHRoZSBjb2RlYmFzZSB0aGF0IHdyaXRlcyB0byBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRob3V0IGhvbGRpbmcgdGhhdCB3cml0ZSBsb2NrPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBhc3NpZ25tZW50cyBsaWtlIGB2bWEtXHUwMDNlYW5vbl92bWEgPWAgYW5kIHRoZW4gcmV2aWV3IHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSB3cml0ZXMgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjAzLjEzNDE3NjE2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMTQ4MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIxMS1cXHRpZiAobGlrZWx5KCF2bWEtXFx1MDAzZWFub25fdm1hKSkge1xcbm1tL3JtYXAuYzoyMTI6XFx0XFx0dm1hLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0yMTMtXFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjAzLjU0NjMzMjQ1OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxNzc4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmN1cnJlbmN5IENvbmNlcm5zIGluIEFub255bW91cyBWTSBBcmVhIFByZXBhcmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBfX2Fub25fdm1hX3ByZXBhcmVgIGdldHMgY2FsbGVkIGZyb20gYHZtZl9hbm9uX3ByZXBhcmVgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQgYHZtZl9hbm9uX3ByZXBhcmVgLCBmcm9tIHdoYXQgSSByZW1lbWJlciwgZ2V0cyB0cmlnZ2VyZWQgZHVyaW5nIGEgcGFnZSBmYXVsdCwgcmlnaHQ/IFRoYXQncyB3aGVuIHRoZSBrZXJuZWwgaXMgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgcGh5c2ljYWwgcGFnZSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmcg4oCTIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdlJ3JlIGhvbGRpbmcgdGhlIG1tYXAgUkVBRCBsb2NrLlxuXG4qV2FpdCBhIG1pbnV0ZSEqIElmIHRoZSBtbWFwIFJFQUQgbG9jayBpcyBoZWxkLCB0aGF0IG1lYW5zIG11bHRpcGxlIHRocmVhZHMgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBleGVjdXRpbmcgYF9fYW5vbl92bWFfcHJlcGFyZWAgY29uY3VycmVudGx5ISBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHJhY2UgY29uZGl0aW9ucyBpZiB3ZSBhcmUgbm90IGNhcmVmdWwsIGFuZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCdzIGFsbW9zdCBhbHdheXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBJIGhhZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCB0byBtYWtlIHN1cmUgaXQncyB0aHJlYWQtc2FmZS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBoYW5kbGluZyBjb25jdXJyZW50IGFjY2VzcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgc2luY2UgaXQncyBvcGVyYXRpbmcgb24gYW5vbnltb3VzIG1lbW9yeSByZWdpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMxNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjA4LjQ5ODExNDAxOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NTpcXHRpbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAxODY6XFx0e1xcbiAxODc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbiAxODg6XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSwgKmFsbG9jYXRlZDtcXG4gMTg5OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQobW0pO1xcbiAxOTI6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDE5NTpcXHRcXHRpZiAoIWF2YylcXG4gMTk2OlxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xcbiAxOTk6XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjAwOlxcdFxcdGlmICghYW5vbl92bWEpIHtcXG4gMjAxOlxcdFxcdFxcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcXG4gMjAyOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxcbiAyMDM6XFx0XFx0XFx0XFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xcbiAyMDQ6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9jaGlsZHJlbisrOyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xcbiAyMDU6XFx0XFx0XFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMDk6XFx0XFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIDIxMDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMTE6XFx0XFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG4gMjEyOlxcdFxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG4gMjEzOlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiAyMTQ6XFx0XFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbiAyMTU6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAyMTY6XFx0XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjE3OlxcdFxcdFxcdGF2YyA9IE5VTEw7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjA4LjQ5ODI3ODQ5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzYyNTYyODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbnVuZHJ1bSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBDb25jdXJyZW5jeSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYF9fYW5vbl92bWFfcHJlcGFyZWAsIGFuZCB0aGUgY29kZSBtYWtlcyBtZSBwYXVzZS4gSXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyBgdm1hLVx1MDAzZWFub25fdm1hYCB3aGlsZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jay4gQW5kIGl0J3MgdXNpbmcgYHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spYCB0byBtYWtlIHN1cmUgb3RoZXIgdGhyZWFkcyBkb24ndCBtZXNzIHdpdGggYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGFub3RoZXIgdGhyZWFkIGhhbmRsaW5nIGEgcGFnZSBmYXVsdCAqY291bGQqIGJlIGNoYW5naW5nIGB2bWEtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBzYW1lIHRpbWUuIFRoYXQncyB3aGF0IHRoZSBsb2NraW5nIHN1Z2dlc3RzLlxuXG5CdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgYW5vbl92bWFfY2xvbmVgIGhhcyB0aGlzIGBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKWAgYXNzZXJ0aW9uLiBJdCAqcmVxdWlyZXMqIHRoZSBtbWFwIFdSSVRFIGxvY2suIElmIHRoYXQgbG9jayBpcyBoZWxkLCB0aGVuIGJ5IGRlZmluaXRpb24sICpubyogb3RoZXIgdGhyZWFkIGNhbiBiZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jayBzaW11bHRhbmVvdXNseS5cblxuVGhlcmVmb3JlLCBpZiBgYW5vbl92bWFfY2xvbmVgIGlzIGV4ZWN1dGluZywgaXQgc2VlbXMgaW1wb3NzaWJsZSBmb3IgYF9fYW5vbl92bWFfcHJlcGFyZWAgdG8gYmUgcnVubmluZyBjb25jdXJyZW50bHkhIEFuZCBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4ndCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkuIFRoZXNlIHR3byBzZWVtaW5nbHkgY29uZmxpY3Rpbmcgb2JzZXJ2YXRpb25zIGp1c3QgZG9uJ3QgYWRkIHVwIVxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgZWRnZSBjYXNlLCBvciBzb21lIG90aGVyIGNvZGUgcGF0aCwgd2hlcmUgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCAqd2l0aG91dCogdGhlIHdyaXRlIGxvY2sgaGVsZC4gTWF5YmUgc29tZXRoaW5nIGluIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgY2FuIHJlc29sdmUgdGhpcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjoxNC4yNjA4NDUwNTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzU6XFx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuIDIzNjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdC8qIFRoZSB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC4gKi9cXG4gMjQwOlxcdFxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQxOlxcdFxcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXFxuIDI0MjpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNldm1fbW0gIT0gc3JjLVxcdTAwM2V2bV9tbSk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVxcdTAwM2Vhbm9uX3ZtYSBtdXN0IGJlIHByb3ZpZGVkLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjoxNC4yNjEwMjEwNzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzMzgzMjY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFgIExvY2tpbmcgaW4gYGR1cF9hbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jbG9uZWAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoYXQgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChzcmMtXHUwMDNldm1fbW0pO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiB0aGUgc291cmNlIFZNQSdzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYHNyYy1cdTAwM2V2bV9tbWApLiBUaGlzIGlzIGtleS4gSXQgbWVhbnMgdGhhdCwgaW4gcHJpbmNpcGxlLCBgc3JjLVx1MDAzZWFub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLiBcblxuVGhlIHF1ZXN0aW9uIGlzLCB3aHkgd2FzIHRoZXJlIGEgY2hhbmdlIGZyb20gbG9ja2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBkaXJlY3RseSB0byB1c2luZyBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IElmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNhbid0IGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgdGhlbiB1c2luZyBgYWN0aXZlX2Fub25fdm1hYCBzaG91bGQgYmUgc2VtYW50aWNhbGx5IGlkZW50aWNhbC5cblxuTXkgbGluZSBvZiByZWFzb25pbmcgaXMsICppZiogYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgY2hhbmdpbmcgYmV0d2VlbiB3aGVuIGl0J3MgcmVhZCB0byBpbml0aWFsaXplIGBhY3RpdmVfYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBjYWxsZWQsIHRoZW4gdGhlcmUncyBubyBwcm9ibGVtLiBJJ20gbWVudGFsbHkgd2Fsa2luZyB0aHJvdWdoIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBvcGVyYXRlcyBvbiB0aGUgZGVzdGluYXRpb24ncyBjaGFpbi4gYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCBkb2Vzbid0IG1vZGlmeSB0aGUgc291cmNlJ3MgYGFub25fdm1hYC4gVGhlIHNhbWUgZ29lcyBmb3IgYG1heWJlX3JldXNlX2Fub25fdm1hYC5cblxuVGhlbiwgSSBicmllZmx5IGNvbnNpZGVyZWQgYW4gYWxpYXMgc2l0dWF0aW9uOyBpZiBgc3JjYCBhbmQgYGRzdGAgd2VyZSB0aGUgc2FtZSwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgKmRpZCogcG90ZW50aWFsbHkgbW9kaWZ5IGBkc3QtXHUwMDNlYW5vbl92bWFgLCB0aGVuIGl0IHdvdWxkIGJlIGEgcHJvYmxlbS4gQnV0IEknbSBxdWlja2x5IGRpc21pc3NpbmcgdGhpcyBzaW5jZSBpdCdzIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCBgc3JjYCBhbmQgYGRzdGAgYXJlICphbHdheXMqIGRpZmZlcmVudC4gQWxzbywgSSdtIGNoZWNraW5nIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm90IGEgbWFjcm8gYW5kIGlzIGEgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLlxuXG5UaGVuLCBJIGJyaWVmbHkgY29uc2lkZXIgYSBjb21waWxlciBpc3N1ZTsgSSdtIGVsaW1pbmF0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRhdGEgcmFjZSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWFkIHR3aWNlIGFuZCB0aGUgY29tcGlsZXIgcmVsb2FkcyB0aGUgdmFsdWUuIEtDU0FOIHdvdWxkbid0IGZsYWcgYSByYWNlIGlmIG5vIGNvbmN1cnJlbnQgd3JpdGVyIGV4aXN0cy4gU2luY2UgdGhlIHdyaXRlIGxvY2sgaXMgaGVsZCwgdGhlcmUncyBubyBjb25jdXJyZW50IHdyaXRlci4gU28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBzcmNgIGlzIGluIGEgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkuIFRoZW4sIHRoZSBhbmFseXNpcyBpcyBhYm91dCBgYW5vbl92bWFfZm9ya2AgYW5kIHdoZXRoZXIgYSBwYXJlbnQncyBWTUEgY291bGQgYmUgbW9kaWZpZWQgYnkgYSBjaGlsZC4gVGhpcyBpcyBhbHNvIGltcG9zc2libGUgYmVjYXVzZSBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQncyBgbW1gLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBgYW5vbl92bWFfbG9ja193cml0ZWAgYW5kIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGVgLiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgb25seSB0YWtlIHRoZSBwb2ludGVyIHRvIGBzdHJ1Y3QgYW5vbl92bWFgIGFuZCBkb24ndCBtb2RpZnkgdGhlIHBvaW50ZXIgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZXkgY2FuJ3QgY2hhbmdlIHdoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKnBvaW50cyB0byouXG5cbk9rYXksIHNvIEkgd2VudCBiYWNrIHRvIHRoZSBwYXRjaCBhbmQgSSByZWFsaXplZCB0aGVyZSdzIGEgcHJvYmxlbTogdGhlICpvcmlnaW5hbCogY29kZSBsb2NrZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYW5kIHVubG9ja2VkIGBhY3RpdmVfYW5vbl92bWFgLiBUaGUgcmVmYWN0b3JpbmcgaW5pdGlhbGl6ZXMgYGFjdGl2ZV9hbm9uX3ZtYWAgZnJvbSBgc3JjLVx1MDAzZWFub25fdm1hYC4gTm93IGl0ICpzaG91bGRuJ3QgbWF0dGVyKiBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyAqZGlmZmVyZW50KiBmcm9tIGBhY3RpdmVfYW5vbl92bWFgLiBCdXQgaG93IGNvdWxkIHRoZXkgYmUgZGlmZmVyZW50PyBJJ20gcmVjaGVja2luZyB0aGUgY29kZSBpbiBgZHVwX2Fub25fdm1hYC5cblxuYGR1cF9hbm9uX3ZtYWAgc2V0cyBgZHN0LVx1MDAzZWFub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hYCBhbmQgdGhlbiBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiAqSW5zaWRlKiBgYW5vbl92bWFfY2xvbmVgLCB0aGUgY29kZSB0aGVuIGdldHMgYSBsb2NhbCBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgICh3aGljaCBpcyBgZHN0LVx1MDAzZWFub25fdm1hYCkuIFRoZW4gdGhlIGNvZGUgY2FsbHMgYGFub25fdm1hX2Nsb25lYCB3aGljaCAqZG9lcyogYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIC0gd2hpY2ggaXMgZXF1aXZhbGVudCB0byBgZHN0LVx1MDAzZWFub25fdm1hYCBpZiBgc3JjID09IGRzdGAuIEluc2lkZSB0aGlzIGZ1bmN0aW9uIHRoZXJlJ3MgYWxzbyB0aGUgbGluZSBgZHN0LVx1MDAzZWFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcysrYCB3aGljaCAqZG9lcyogbW9kaWZ5IGBkc3QtXHUwMDNlYW5vbl92bWFgLiBTbyB0aGlzIG1lYW5zIHRoYXQgaWYgYHNyY2AgaXMgYW4gYWxpYXMgZm9yIGBkc3RgLCB0aGVuIGBzcmMtXHUwMDNlYW5vbl92bWFgIGdldHMgbW9kaWZpZWQuXG5cbkJ1dCBJIGtlZXAgdGhpbmtpbmcgdGhhdCBJIGVzdGFibGlzaGVkIGVhcmxpZXIgdGhhdCB0aGV5IGFyZSAqYWx3YXlzKiBkaWZmZXJlbnQuLi4gVW5sZXNzLi4uICp1bmxlc3MqIHRoZSBzYW1lIFZNQSBpcyBwYXNzZWQgdG8gYGFub25fdm1hX2Nsb25lYCBhcyBib3RoIGBzcmNgXG5cbiIsIklucHV0VG9rZW5zIjozNDEwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjozMi41OTkzNTExNjZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTk3NzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI1MT1lbnVtIHZtYV9vcGVyYXRpb24ge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0yNTctXFxubW0vaW50ZXJuYWwuaDoyNTg6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9pbnRlcm5hbC5oLTI1OS1cXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMzE5LSAqL1xcbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9ybWFwLmMtMzIxLVxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG4tLVxcbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4tLVxcbm1tL3JtYXAuYy00MDMtXFx0ICovXFxubW0vcm1hcC5jOjQwNDpcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbm1tL3JtYXAuYy00MDUtXFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4tLVxcbm1tL3JtYXAuYy00NDQtLypcXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2VcXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxcbi0tXFxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYy01MzUtXFxubW0vdm1hLmM6NTM2OlxcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xcbm1tL3ZtYS5jLTUzNy1cXHRpZiAoZXJyKVxcbi0tXFxubW0vdm1hLmM9NjEyPXN0YXRpYyBpbnQgZHVwX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbi0tXFxubW0vdm1hLmMtNjMzLVxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jOjYzNDpcXHRcXHRyZXQgPSBhbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgVk1BX09QX01FUkdFX1VORkFVTFRFRCk7XFxubW0vdm1hLmMtNjM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTE5MjktXFx0XFx0XFx0Z290byBvdXRfZnJlZV92bWE7XFxubW0vdm1hLmM6MTkzMDpcXHRcXHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxcbm1tL3ZtYS5jLTE5MzEtXFx0XFx0XFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjMzLjU0MTMzMjI5NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc2NzE1NTMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBgYW5vbl92bWFgIExvY2tpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzIHN0cmFpZ2h0Zm9yd2FyZDogaW4gc2V2ZXJhbCBrZXkgYHZtYWAgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyDigJMgYGFub25fdm1hX2ZvcmtgLCBgX19zcGxpdF92bWFgLCBgZHVwX2Fub25fdm1hYCwgYW5kIGBjb3B5X3ZtYWAg4oCTIGl0J3MgY2xlYXIgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBWTUFzIChgc3JjYCBhbmQgYGRzdGAsIG9yIGVxdWl2YWxlbnQpIGFyZSBhbHdheXMgZGlzdGluY3QuIFRoZXJlZm9yZSwgdGhlIHNvdXJjZSdzIGBhbm9uX3ZtYWAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHRoZSBjbG9uaW5nIHByb2Nlc3MsIG5vciBpcyB0aGUgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXNgIG1vZGlmaWVkIGJ5IGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgd2hpY2ggc2hvdWxkIHJ1bGUgb3V0IGRhdGEgcmFjZXMuXG5cbkhvd2V2ZXIsIEkgcGF1c2VkLCBjb25zaWRlcmluZyB0aGUgcm9sZSBvZiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYC4gSSByZW1lbWJlcmVkIHRoYXQgaXQgbW9kaWZpZXMgdGhlIGBhbm9uX3ZtYV9jaGFpbmAsIGJ1dCBjcml0aWNhbGx5LCBpdCBkb2Vzbid0IGRpcmVjdGx5IGFsdGVyIHRoZSBgdm1hLVx1MDAzZWFub25fdm1hYCBwb2ludGVyIGl0c2VsZi4gU28sIHRoYXQgYXZlbnVlIHdhcyBhIGRlYWQgZW5kLlxuXG5NeSBoeXBvdGhlc2lzIHdhcyB0aGF0IEkgY291bGQgcmVtb3ZlIHRoZSBjYWxsIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7YCBiZWNhdXNlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgIGJ1dCBJIG5lZWRlZCB0byBmaW5kIG91dCB3aHkuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhpcyBtdXN0IGJlIGEgY29zbWV0aWMgY2hhbmdlIHRvIG1ha2UgdGhlIGNvZGUgY2xlYW5lciwgYnV0IHRoYXQgZGlkIG5vdCBmZWVsIHJpZ2h0LiBDb3VsZCB0aGUgY2hhbmdlIGJlIG1lYW50IHRvIGVsaW1pbmF0ZSBhIGNvbXBpbGVyIHdhcm5pbmcgb3IgYSBLQ1NBTiBmYWxzZSBwb3NpdGl2ZT8gU2luY2UgS0NTQU4gbmVlZHMgYSB3cml0ZSB0byBkZXRlY3QgYSBkYXRhIHJhY2UsIHRoaXMgc2VlbWVkIHVubGlrZWx5LlxuXG5JIHRoZW4gY29uc2lkZXJlZCBwYWdlIGZhdWx0cyBoYW5kbGVkIGJ5IHRoZSBwZXItVk1BIGxvY2sgYW5kIGB2bWZfYW5vbl9wcmVwYXJlYC4gSSByZWFsaXplZCB0aGF0IGB2bWZfYW5vbl9wcmVwYXJlYCAqcmVhZHMqIGB2bWEtXHUwMDNlYW5vbl92bWFgIHdpdGhvdXQgdGhlIG1tYXAgbG9jay4gVGhpcyBpcyBhIGNvbmN1cnJlbnQgUkVBRCwgd2hpY2ggaXMgbm90IGEgcHJvYmxlbS5cblxuVGhlIGtleSB0aGVuIGJlY2FtZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCB3YXMgYmVpbmcgKndyaXR0ZW4qIHRvIGJ5IGFub3RoZXIgdGhyZWFkLiAgSSBxdWlja2x5IGRpc21pc3NlZCB0aGlzLiBJJ20gaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrIGluIG1vc3Qgb2YgdGhlc2Ugc2NlbmFyaW9zLiBUaGUgcGVyLVZNQSBsb2NrIHdvdWxkbid0IHdvcmsgYXMgYHZtZl9hbm9uX3ByZXBhcmVgIG5lZWRzIGEgbW1hcCByZWFkIGxvY2sgcHJpb3IgdG8gY2FsbGluZyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgc28gYWdhaW4sIG5vIGNvbmN1cnJlbnQgd3JpdGVzLlxuXG5JIHRoZW4gY29uc2lkZXJlZCBvdGhlciB0aHJlYWRzIGNvdWxkIGNoYW5nZSBgc3JjLVx1MDAzZWFub25fdm1hYCwgYnV0IHdhcyBub3QgYWJsZSB0byB0aGluayBvZiBhbnkgb3RoZXIgY29kZSBwYXRocy5cblxuSSB3YXMgc3R1bXBlZCwgdGhlbiBpdCBkYXduZWQgb24gbWUgdG8gc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UuIEkgYW0gbm93IGxvb2tpbmcgZm9yIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7YCBpbiB0aGUga2VybmVsIGxvZ3MgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjQ3LjMwODQ5NDcxOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjg1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl92bWFfbG9ja193cml0ZVxcXFwoYWN0aXZlX2Fub25fdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzUyLVxcdCAqL1xcbm1tL3JtYXAuYzozNTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuLS1cXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00OTItXFxubW0vcm1hcC5jOjQ5MzpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQ5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTI6NDcuMzY0NzI1NzU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTkzNTEzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEFub255bW91cyBWTUEgVW5saW5raW5nKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIGp1c3QgdHJhY2luZyB0aHJvdWdoIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB1bmxpbmtpbmcgb2YgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gSSBqdXN0IHNhdyBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO2AgaW4gYHVubGlua19hbm9uX3ZtYXNgLiBUaGlzIHNlZW1zIGludGVyZXN0aW5nIGJlY2F1c2UgSSBrbm93IHdlIGhhdmUgd3JpdGUgbG9ja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdyaXRlIGxvY2sgaXMgaW4gYHVubGlua19hbm9uX3ZtYXNgLCB3aGljaCBpcyBhYm91dCB1bmxpbmtpbmcsIG5vdCB3cml0aW5nLiBTbywgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1bmxpbmtfYW5vbl92bWFzYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZXNlIGxvY2tzIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdW5saW5raW5nIGFuZCB3cml0ZSBhY2Nlc3Mgb24gYWN0aXZlIGFub255bW91cyBWTUFzLiBMZXQncyBzdGFydCB3aXRoIGB1bmxpbmtfYW5vbl92bWFzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG9ja3MgYXJlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIFZNQSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIHRlYXJpbmcgZG93biB0aGUgbWVtb3J5IG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTI6NTIuNDY0MDgwNTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Nzk6XFx0dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiA0ODA6XFx0e1xcbiA0ODE6XFx0XFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpuZXh0O1xcbiA0ODI6XFx0XFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSB2bWEtXFx1MDAzZWFub25fdm1hO1xcbiA0ODM6XFx0XFxuIDQ4NDpcXHRcXHQvKiBBbHdheXMgaG9sZCBtbWFwIGxvY2ssIHJlYWQtbG9jayBvbiB1bm1hcCBwb3NzaWJseS4gKi9cXG4gNDg1OlxcdFxcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXFx1MDAzZXZtX21tKTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0XFx0LyogVW5mYXVsdGVkIGlzIGEgbm8tb3AuICovXFxuIDQ4ODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkge1xcbiA0ODk6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hX2NoYWluKSk7XFxuIDQ5MDpcXHRcXHRcXHRyZXR1cm47XFxuIDQ5MTpcXHRcXHR9XFxuIDQ5MjpcXHRcXG4gNDkzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0LypcXG4gNDk2OlxcdFxcdCAqIFVubGluayBlYWNoIGFub25fdm1hIGNoYWluZWQgdG8gdGhlIFZNQS4gIFRoaXMgbGlzdCBpcyBvcmRlcmVkXFxuIDQ5NzpcXHRcXHQgKiBmcm9tIG5ld2VzdCB0byBvbGRlc3QsIGVuc3VyaW5nIHRoZSByb290IGFub25fdm1hIGdldHMgZnJlZWQgbGFzdC5cXG4gNDk4OlxcdFxcdCAqL1xcbiA0OTk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF2YywgbmV4dCwgXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuIDUwMDpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9yZW1vdmUoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbiA1MDM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjUyLjQ2NDIzMDk5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxODU3MzQ3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlZXAgRGl2ZSBpbnRvIGEgS2VybmVsIFBhdGNoOiBBbm9uX3ZtYSBMb2NrIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGBhbm9uX3ZtYWAgbG9ja3MgaW4gYGFub25fdm1hX2Nsb25lYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5J3JlIHJlcGxhY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBhcmUgdGhleSAqcmVhbGx5KiB0aGUgc2FtZT8gSXMgdGhpcyBqdXN0IGEgY2xlYW51cCwgb3IgaXMgdGhlcmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gZml4IGhlcmU/XCIgSSdtIHNrZXB0aWNhbCwgc28gSSBuZWVkIHRvIGdvIHRocm91Z2ggZXZlcnl0aGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byBjaGVjayBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBzb21laG93IGJlIG1vZGlmaWVkIGFmdGVyIGl0J3MgcmVhZCBidXQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBMb29raW5nIGF0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBpdCBzZWVtcyB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGNhbiBjaGFuZ2UgdmlhIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBidXQgb25seSBpZiBgc3JjYCBpcyB0aGUgc2FtZSBhcyBgZHN0YC4gQnV0IHRoYXQncyBpbXBvc3NpYmxlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMuIFNvIHRoYXQncyBub3QgYSB0aGluZy4gYGFub25fdm1hX2NoYWluX2FsbG9jYCBkb2Vzbid0IG1vZGlmeSBpdCBlaXRoZXIuIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgaXNuJ3QgZG9pbmcgYW55dGhpbmcsIGp1c3QgYSB3YXJuaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLiBIb3dldmVyLCB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyB0byBnZXQgaW50byB0aGlzIHNpdHVhdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlbS4gQW5vdGhlciB0aHJlYWQgY2FuJ3QgbW9kaWZ5IGl0IGlmIHdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYC4gU28sIGEgcGFnZSBmYXVsdCBpbiB0aGUgcGFyZW50LCBhIHBhZ2UgZmF1bHQgaW4gdGhlIGNoaWxkLCBhbmQgZXZlbiBwYWdlIGZhdWx0cyBpbiBhIGRpZmZlcmVudCBwcm9jZXNzIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGBhbm9uX3ZtYWAsIGNhbid0IG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYC4gYHVubGlua19hbm9uX3ZtYXNgLCBgYW5vbl92bWFfY2xvbmVgLCBhbmQgYG1heWJlX3JldXNlX2Fub25fdm1hYCBpbiBhIHNpYmxpbmcgcHJvY2VzcyBjYW4ndCBtb2RpZnkgaXQgZWl0aGVyLiBTbywgaXQgYXBwZWFycyB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzICpvbmx5KiBtb2RpZmllZCB3aGVuIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCwgYW5kIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy5cblxuVGhlcmVmb3JlLCB0aGlzIGFwcGVhcnMgdG8gYmUgcHVyZWx5IGEgY29zbWV0aWMgY2hhbmdlLCBhIGNsZWFudXAuXG5cbkJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlLiBJIG11c3QgYXNrIG15c2VsZiwgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyB0aGUgZmFjdCB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGJlaW5nIGEgcG9pbnRlciBtYXR0ZXI/XG5cbkNvdWxkIGl0IGJlIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgYmVpbmcgZXZhbHVhdGVkIGFzIGEgbWFjcm8gd2l0aCBzaWRlIGVmZmVjdHM/IE5vLCBgc3JjYCBpcyBgc3RydWN0IHZtX2FyZWFfc3RydWN0YC4gT2theSwgdGhhdCdzIG5vdCBhIHRoaW5nLlxuXG5Db3VsZCB0aGVyZSBiZSBhIGRhdGEgcmFjZSB0aGF0IEtDU0FOIHdvdWxkIGNvbXBsYWluIGFib3V0PyBObywgd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmNgIGlzIGJlaW5nIG1lcmdlZCBvciBzcGxpdD8gTm8sIHdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jay5cblxuSSBqdXN0IG5lZWQgdG8gYmUgc3VwZXIgc3VyZS4gQWghIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQgZnJvbSBgZHVwX2Fub25fdm1hYD8gSSBuZWVkIHRvIGNoZWNrIHRoaXMgcGF0aC4gTG9va3MgbGlrZSB3ZSAqZG8qIHNldCBgZHN0LVx1MDAzZWFub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hYCBiZWZvcmUgY2FsbGluZyBgYW5vbl92bWFfY2xvbmVgLiBCdXQgZXZlbiBoZXJlLCB3ZSBzdGlsbCBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2suIFRoaXMgc3RpbGwgc2VlbXMgc2FmZS5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGV4aGF1c3RlZCBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIFRoaXMgcmVhbGx5IHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgYSBjbGVhbnVwLiBUaW1lIHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBpbiB0aGUga2VybmVsIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6MTQuMzIxNTgwODEzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY4MDYzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFub25fdm1hX2xvY2tfd3JpdGVcXFxcKGFjdGl2ZV9hbm9uX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDkyLVxcbm1tL3JtYXAuYzo0OTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy00OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjE2Ljk4OTY0OTQ2M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ5MDg2NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRXVyZWthISBBIEdpdCBTb2x1dGlvbiEqKlxuXG5SaWdodCwgSSB3YXMgc3R1Y2sgZm9yIGEgbW9tZW50IHRoZXJlLCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbW1pdC4uLiBJIHdhcyBwcm9iYWJseSBvdmVydGhpbmtpbmcgaXQuIEluc3RlYWQgb2Ygc29tZSBjb21wbGV4IHNjcmlwdCBvciBkaWdnaW5nIHRocm91Z2ggdGhlIHdlYiwgd2h5IGRpZG4ndCBJIGp1c3QuLi4gd2FpdCBhIG1pbnV0ZS4uLiAqZ2l0IGxvZyohIE9mIGNvdXJzZS4gSSBjYW4gYWJzb2x1dGVseSB1c2UgYGdpdCBsb2dgIHRvIHNlYXJjaCBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGtleS4gVGhhdCdzIGdvaW5nIHRvIHNhdmUgbWUgYSB0b24gb2YgdGltZS4gU2ltcGxlLCBlZmZlY3RpdmUsIGVsZWdhbnQuIExldCdzIGZpcmUgdGhhdCB1cCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM1OTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MzoyMC44Mzg3Mzg3NDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM0NjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChhY3RpdmVfYW5vbl92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiLmdpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6MjAuODg4Njc5NjIyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDU0NTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEZpbmRpbmcgdGhlIFJlbGV2YW50IENvbW1pdCoqXG5cbk9rYXksIHNvIGBncmVwcGVyYCBpcyBvbmx5IGdvaW5nIHRvIGhlbHAgbWUgd2l0aGluIG15IGN1cnJlbnQgd29ya2luZyB0cmVlLCBub3QgZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gVGhhdCdzIGEgYml0IG9mIGEgc2V0YmFjay4gQnV0LCBJIGNhbiB1c2UgYGdpdCBsb2cgLXBgIGFuZCB0aGVuIGBncmVwYCBhcm91bmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGwgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgdG8gc2VhcmNoIHRoZSBwYXRjaGVzIGluIHRoZSBnaXQgaGlzdG9yeS4gXG5cbkhtbSwgd2FpdC4gSSBkb24ndCBoYXZlIGEgc3BlY2lmaWMgdG9vbCB0byBleGVjdXRlIGFyYml0cmFyeSBzaGVsbCBjb21tYW5kcyByZWFkaWx5IGF2YWlsYWJsZS4gSSBjb3VsZCB0cnkgdG8gbG9vayBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgaWYgaXQncyByZWNlbnQuIFxuXG5IYW5nIG9uLi4uIEkgdGhpbmsgdGhlIGNvbW1pdCBJIG5lZWQgaXMgYWN0dWFsbHkgdGhlIEhFQUQgY29tbWl0ICppbiBteSBjdXJyZW50IHdvcmtzcGFjZSohIFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHRoYXQncyB0aGUgY2FzZSwgSSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjdXJyZW50IEhFQUQuIE5vdywgaG93IGRvIEkgZG8gdGhhdCB3aXRob3V0IGV4dGVybmFsIHRvb2xzPyBDb3VsZCBJIHVzZSBgZ3JlcHBlcmA/IE5vLCBpdCdzIHRpZWQgdG8gdGhlIHdvcmtpbmcgdHJlZS4gV2FpdCwgbWF5YmUgSSBjYW4gcmVhZCBgLmdpdC9DT01NSVRfRURJVE1TR2A/IE5vLCB0aGF0J3Mgd2hhdCdzIGJlaW5nIHdyaXR0ZW4gKmJlZm9yZSogY29tbWl0dGluZy4gXG5cbkFoYSEgTWF5YmUgYC5naXQvbG9ncy9IRUFEYCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gSSdtIGFmdGVyLiBJJ20gZ29pbmcgdG8gdHJ5IHJlYWRpbmcgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzc4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MzoyNy4wOTQxMzcwNzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiLmdpdC9sb2dzL0hFQURcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGY1ZjkzMjdlMjUxYTRlZmI5YTk4Nzc0MDkzZWY0Njc1YTRiMTcwYjkgc3l6a2FsbGVyIFxcdTAwM2NzeXprYWxsZXJAc2VyaWVzLXdvcmtmbG93eGhiNWYtdHJpYWdlLWFjdGlvbi0yNDQ3ODYwODM4Lihub25lKVxcdTAwM2UgMTc4Njk0MjE2NiArMDAwMFxcdHJlc2V0OiBtb3ZpbmcgdG8gZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOVxcbiAgIDI6XFx0ZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOSA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljIHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2UgMTc4Njk0MjE3MSArMDAwMFxcdGNvbW1pdDogc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjI3LjA5NDIwNjA0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI5MjE5MDExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3NtZXRpYyBBbm9uX1ZNQSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCB3aXRoIGEgcHJldHR5IGdlbmVyaWMgbWVzc2FnZS4gTm8gYXV0aG9yLCBubyBvcmlnaW5hbCBkZXNjcmlwdGlvbiDigJMgZ290dGEgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gZnJvbSBzY3JhdGNoLiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyxcIiBncmVhdC4gTGV0J3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLlxuXG5GaXJzdCB0aG91Z2h0OiBpcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBnZXRzIGNoYW5nZWQgKmR1cmluZyogdGhpcyBmdW5jdGlvbj8gSSBxdWlja2x5IHJ1bGVkIG91dCB0aGUgb2J2aW91cyBvbmU6IGlmIGBzcmNgIGFuZCBgZHN0YCB3ZXJlIHRoZSBzYW1lIFZNQSwgaXQgd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AuIEkgYWxyZWFkeSBwcm92ZWQgdGhhdCBgc3JjYCBjYW4ndCBiZSBgZHN0YCwgYmVjYXVzZSB0aGUgbG9vcCB3b3VsZCBuZXZlciB0ZXJtaW5hdGUuXG5cbkFscmlnaHQsIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IEkga25vdyBpZiBpdCAqaXMqIGVtcHR5LCB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB3aWxsIG5vdCBleGVjdXRlLCBhbmQgdGhlbiB0aGVyZSB3aWxsIGJlIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYC4gQnV0LCBJIHJlYWxpemVkOiBpZiBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYCBpcyBlbXB0eSwgdGhlbiBgc3JjLVx1MDAzZWFub25fdm1hYCAqbXVzdCogYmUgYE5VTExgLiBUaGUgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjaGVjayBjb25maXJtcyB0aGlzLiBBbmQsIGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIGBOVUxMYCwgdGhlbiBgYWN0aXZlX2Fub25fdm1hYCBpcyBgTlVMTGAsIGFuZCB3ZSByZXR1cm4gZWFybHkuIFNvLCBgc3JjLVx1MDAzZWFub25fdm1hYCAqY2Fubm90KiBiZSBudWxsLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBgTlVMTGAsIHRoZW4gYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgY2FuJ3QgYmUgZW1wdHksIHJpZ2h0P1xuXG5XYWl0LCBob2xkIG9uLi4uIHRoZSBhc3NlcnRpb24gaW4gYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBkb2Vzbid0IHNheSBgVk1fV0FSTl9PTl9PTkNFKHNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtgLiBTbywgaXQncyAqcG9zc2libGUqIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm9uLU5VTEwgd2hpbGUgYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IE5vLCB3YWl0ISBUaGUgYGFub25fdm1hX2NoYWluYCBjb250YWlucyB0aGUgYGFub25fdm1hYHMgdGhlIFZNQSBpcyBhdHRhY2hlZCB0by4gSWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm9uLU5VTEwsIGl0ICptdXN0KiBiZSBpbiBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYC4gU28sIHRoZSBjaGFpbiBjYW4gKm5ldmVyKiBiZSBlbXB0eSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBub3QgYE5VTExgLiBUaHVzLCB0aGUgbG9vcCBleGVjdXRlcyBhdCBsZWFzdCBvbmNlLCBhbmQgYHNyY2AgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGBkc3RgLlxuXG5Pa2F5LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBkb2VzIGBhbm9uX3ZtYV9jbG9uZWAgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBMZXQncyBjb25zaWRlciB0aGUgd2F5cyBgYW5vbl92bWFgIG1pZ2h0IGJlIHRvdWNoZWQ6IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBgYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnRgLCBhbmQgYG1heWJlX3JldXNlX2Fub25fdm1hYC4gVGhlIGZpcnN0IG1vZGlmaWVzIHRoZSBjaGFpbiBhbmQgYGFub25fdm1hX2NoYWluYCwgYnV0ICpub3QqIGB2bWEtXHUwMDNlYW5vbl92bWFgLiBUaGUgc2Vjb25kIG1hbmlwdWxhdGVzIHRoZSBSQi10cmVlLCBhZ2Fpbiwgbm90IGB2bWEtXHUwMDNlYW5vbl92bWFgLiBUaGUgdGhpcmQsIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAsICpkb2VzKiBtb2RpZnkgYGRzdC1cdTAwM2Vhbm9uX3ZtYWAsIGJ1dCBzaW5jZSBgc3JjICE9IGRzdGAsIGl0J3MgaXJyZWxldmFudC4gQW5kIHRoZXJlIGlzIGEgY2FzZSBmb3IgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrK2AsIGJ1dCB0aGF0J3Mgbm90IGNoYW5naW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgLlxuXG5TbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHRoZSBjbG9uZSBwcm9jZXNzIGl0c2VsZi4gSXQncyBleGFjdGx5IHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLiBTbyB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCByaWdodD8gQnV0Li4uIHdoeSB3b3VsZCBzb21lb25lIG1ha2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlPyBDb21waWxlciB3YXJuaW5nPyBNYXliZS4gQXZvaWRpbmcgYSBLQ1NBTiBkYXRhIHJhY2U/IFBvdGVudGlhbGx5LlxuXG5CdXQgd2FpdCwgZGF0YSByYWNlcyBvY2N1ciB3aGVuIHlvdSBoYXZlIGNvbmN1cnJlbnQgcmVhZHMvd3JpdGVzLiBObyBjb25jdXJyZW50IHdyaXRlcyBhcmUgaGFwcGVuaW5nIGhlcmUsIGJlY2F1c2UgSSBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAuIFRodXMsIG5vIG90aGVyIHRocmVhZCBjYW4gY2hhbmdlIGBzcmNgIGFuZCB0aHVzLCBubyBjb25jdXJyZW50IHdyaXRlIGV4aXN0cy5cblxuV2hhdCBpZiB0aGUgVk1BIGBzcmNgIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3Nlcz8gTm9wZS4gVk1BcyBhcmUgTk9UIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3Nlcy4gRWFjaCBwcm9jZXNzIGhhcyBpdHMgb3duIFZNQXMuIEFuZCBldmVuIGlmIHRoZXkgc2hhcmUgYW4gYGFub25fdm1hYCwgdGhleSBoYXZlIHRoZWlyIG93biBWTUFzLiBTbywgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgYSBmaWVsZCBpbiBhIFZNQSBiZWxvbmdpbmcgdG8gYHNyYy1cdTAwM2V2bV9tbWAuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgbWVhbnMgKm5vKiBvdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBpdC5cblxuQ291bGQgYGtodWdlcGFnZWRgIGJlIGRvaW5nIHNvbWV0aGluZyBmdW5reT8gVGltZSB0byBjaGVja1xuXG4iLCJJbnB1dFRva2VucyI6NDQ2MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NDQuMzg2Mzk4ODM2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY5MjU3NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjQ1LjM2MzMzNTY0OVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUxMDUzOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyBBbm9ueW1vdXMgVk1BcyBhbmQgS1NNKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYW5zd2VyIGlzIGRlZmluaXRpdmVseSBcIm5vLlwiIEJ1dCwgdGhlIHF1ZXN0aW9uIGxpbmdlcmluZyBpbiBteSBtaW5kIGlzIGFib3V0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBga3NtYCDigJMgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcg4oCTIHRvIGludHJvZHVjZSBtb2RpZmljYXRpb25zLiBUaGF0J3MgdGhlIHJlYWwgY3J1eCBvZiB0aGlzLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgc3RydWN0dXJlLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBtb3JwaHMgaW50byBhIHNwZWNpZmljIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBjb25jbHVzaXZlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGBrc21gIGFjdGl2ZWx5IHRhbXBlcnMgd2l0aCBgdm1hLVx1MDAzZWFub25fdm1hYC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGN1cmlvc2l0eTsgaXQncyBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24gSSBuZWVkIHRvIHZhbGlkYXRlIHRvIGVuc3VyZSB0aGUgc3RhYmlsaXR5IGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBga3NtYCBjb2RlIGFuZCB0cmFjaW5nIHRvIHNlZSBpZiBpdCBtb2RpZmllcyBgdm1hLVx1MDAzZWFub25fdm1hYCBpbiBhbnkgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzExNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjQ5LjIxNDM5MTk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5Mzc3MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NDkuMjcwMzM2Mjk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjMzODE3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIGBhbm9uX3ZtYWAgYW5kIGBtcmVtYXBgIEludGVyYWN0aW9uKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSByZXNwb25zZSBpcyBuZWdhdGl2ZS4gQnV0IGEgbmFnZ2luZyBjb25jZXJuIHN1cmZhY2VzOiBjb3VsZCB0aGUgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgYWx0ZXJlZCBkdXJpbmcgYW4gYG1yZW1hcGAgb3BlcmF0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIGBtcmVtYXBgIHRvIGludGVyZmVyZSB3aXRoIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEncyAoVk1BJ3MpIGFzc29jaWF0ZWQgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGBhbm9uX3ZtYWApIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGRpZmZpY3VsdC10by10cmFjayBidWdzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbXJlbWFwYCBjb2RlIGFuZCB2ZXJpZnkgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIG1vZGlmeWluZyBgdm1hLVx1MDAzZWFub25fdm1hYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbGVnaXRpbWF0ZSBjb25jZXJuLCBvciBpZiBJJ20gd29ycnlpbmcgYWJvdXQgYSBub24taXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3Mzg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NTMuNjkzNzIwODMzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMTc4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hLVxcdTAwM2Vhbm9uX3ZtYSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21yZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1Mzo1My43NDIxMzAzMDhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDMxMjc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIGBhbm9uX3ZtYWAgYW5kIGBtYWR2aXNlYCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFuc3dlciBpcyBubywgYnV0IHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBndXQncyB0ZWxsaW5nIG1lIHRoZXJlJ3MgYSBwb3RlbnRpYWwgaXNzdWUgYnJld2luZyBoZXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBgbWFkdmlzZWAgaW50ZXJhY3RzIHdpdGggdGhlIGBhbm9uX3ZtYWAgc3RydWN0dXJlLiBNeSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgdGVsbHMgbWUgdGhhdCBpdCdzIG9mdGVuIHRoZSBsZXNzIG9idmlvdXMgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byB0aGUgbW9zdCBjaGFsbGVuZ2luZyBidWdzLlxuXG5UaGUgY29yZSBxdWVzdGlvbiB0aGF0J3MgZHJpdmluZyBtZSBub3cgaXM6IGRvZXMgYG1hZHZpc2VgICphY3R1YWxseSogbW9kaWZ5IGB2bWEtXHUwMDNlYW5vbl92bWFgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgY29kZSBwYXRoIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gV2UgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbWFkdmlzZWAgaW1wbGVtZW50YXRpb24gYW5kIHRoZSByZWxldmFudCBtZW1vcnkgbWFwcGluZyBzdHJ1Y3R1cmVzLCByaWdodCBkb3duIHRvIHRoZSBiaXRzLCB0byBiZSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXIgb3B0aW1pemF0aW9uIG9yIG1hbmlwdWxhdGlvbiBgbWFkdmlzZWAgcGVyZm9ybXMgZG9lc24ndCBpbmFkdmVydGVudGx5IGFmZmVjdCB0aGUgYGFub25fdm1hYCBpbiBhIHdheSB0aGF0IGJyZWFrcyBhc3N1bXB0aW9ucyBvciBpbnRyb2R1Y2VzIHN1YnRsZSBjb3JydXB0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjU3LjM3NjQ0NTc1OVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MzUzMzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjU3LjQyNjE4ODI2NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI3Mjc0NDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IERldGVybWluaW5nIEZ1enppbmcgTmVjZXNzaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb3NtZXRpYy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYSBkaXJlY3QgZGVyZWZlcmVuY2Ugb2YgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklzIHRoZXJlICphbnkqIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgP1wiIElmIHRoZXJlIHdlcmUsIHRoaXMgY291bGQgaW50cm9kdWNlIGEgZGF0YSByYWNlLCBldmVuIGlmIEtDU0FOIGlzbid0IHNjcmVhbWluZyBhYm91dCBpdC4gQnV0LCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJ3Mgbm8gd2F5LiBJJ20gaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrIHdoZW4gYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgbm8gb3RoZXIgdGhyZWFkIGNhbiB0b3VjaCBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBJJ3ZlIHJlLWNoZWNrZWQgdGhhdCBgc3JjYCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgYHZtYV9hZGp1c3RgIG9yIGB2bWFfbWVyZ2VgLCBib3RoIG9mIHdoaWNoIGFsc28gcmVxdWlyZSB0aGUgbW1hcCB3cml0ZSBsb2NrLiBUaGUgb25seSBjaGFuZ2VzIGFyZSB0byBgZHN0YCwgd2hpY2ggZG9lc24ndCBhbHRlciBgc3JjYC5cblxuSSBjb25zaWRlcmVkIGEgcG90ZW50aWFsIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWxvYWRlZCwgYW5kIHRoZXJlIG1heSBiZSBhIHRpbnkgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlbG9hZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYC4gT3IgbWF5YmUgaXQncyBqdXN0IGNsZWFuZXIgY29kZS4gSWYgaXQncyBqdXN0IGFuIG9wdGltaXphdGlvbiBvciBjbGVhbnVwLCBpdCdzIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0IGRvZXNuJ3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGlzbid0IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gU28sIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZS4gSXMgYHNyY2AgYSBtYWNybz8gTm8sIGl0J3MgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuIElzIHRoZXJlIGFueSBjaGFuY2UgdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBnZXRzIG1vZGlmaWVkIGJldHdlZW4gaXRzIGluaXRpYWxpemF0aW9uIGFuZCB3aGVyZSBpdCdzIHVzZWQ/IE5vLCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMuXG5cblNvLCBpdCdzIGNlcnRhaW4gdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBpcyAqZXhhY3RseSogYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0IG1pZ2h0IGJlIHJlYWQgYWdhaW4gZnJvbSBtZW1vcnkuIEFuZCBzaW5jZSBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4ndCBjaGFuZ2UsIHRoZSB2YWx1ZXMgYXJlIGlkZW50aWNhbC4gSXQncyBhIGNvc21ldGljIGNoYW5nZSBvciBhIHRpbnkgb3B0aW1pemF0aW9uLCBub3RoaW5nIG1vcmUuXG5cbkhlcmUncyBteSBmdWxsIHJlYXNvbmluZzogVGhlIHBhdGNoIHVzZXMgYSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYCBndWFyYW50ZWVzIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuIFRoZSBvcGVyYXRpb25zIG9uIHRoZSBkaXN0aW5jdCBgZHN0YCB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCBhbHNvIGRvbid0IHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBjb25zdGFudCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIGEgY29zbWV0aWMgb3IgbWljcm8tb3B0aW1pemF0aW9uIHdpdGggbm8gZnVuY3Rpb25hbCBlZmZlY3QuIE5vIGZ1enppbmcgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk3MSwiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjU0OjE0LjY5ODkzNTQ5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbm9uX3ZtYV9jbG9uZWAgaW4gYG1tL3JtYXAuY2AgdG8gdXNlIHRoZSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgYHNyYy1cXHUwMDNlYW5vbl92bWFgIGFnYWluIHdoZW4gY2FsbGluZyBgYW5vbl92bWFfbG9ja193cml0ZWAuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXFx1MDAzZXZtX21tYCAoYXMgYXNzZXJ0ZWQgYnkgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCksIG5vIG90aGVyIHRocmVhZCBjYW4gY29uY3VycmVudGx5IG1vZGlmeSBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAuIEZ1cnRoZXJtb3JlLCBgc3JjYCBhbmQgYGRzdGAgYXJlIGFsd2F5cyBkaXN0aW5jdCBWTUFzLCBzbyB0aGUgb3BlcmF0aW9ucyBvbiBgZHN0YCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGRvIG5vdCBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgcmVtYWlucyBjb25zdGFudCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbiwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2Ugb3IgbWljcm8tb3B0aW1pemF0aW9uIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFNpbmNlIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiBgc3JjLVxcdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gVGh1cywgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTQ6MTQuNjk4OTY2NjI2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxhb5f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 04:05:17 +0000 UTC FinishedAt: 2026-08-17 04:54:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDQ6NDk6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0zNTAsNyAmIzQzOzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEmIzM5O3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cbiBcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC5cbiBcdCAqL1xuLVx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuJiM0MztcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDQ6NDk6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMzUwLDcgJiM0MzszNTAsNyBAQCBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLAogCSAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLgogCSAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEmIzM5O3Mgc2hhcmUgdGhlIHNhbWUgcm9vdC4KIAkgKi8KLQlhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpOwomIzQzOwlhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgJmFtcDtkc3QtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLSZndDthbm9uX3ZtYTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBDbG9uaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIHRhcmdldCBgbW0vcm1hcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyB0aGlzIGxpbmU6IGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpO2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLgoKTGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3dhcHBpbmcgb3V0IGBzcmMtJmd0O2Fub25fdm1hYCBmb3IgYGFjdGl2ZV9hbm9uX3ZtYWA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5LiBJcyB0aGUgYGFjdGl2ZV9hbm9uX3ZtYWAgYSB2YWxpZCBhbmQgY29ycmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jayBtaXRpZ2F0aW9uIGhlcmU/IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoYXQgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2Nsb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9ybWFwLmMtMjkyLS8qKlxubW0vcm1hcC5jOjI5MzogKiBhbm9uX3ZtYV9jbG9uZSAtIEVzdGFibGlzaGVzIG5ldyBhbm9uX3ZtYV9jaGFpbiBvYmplY3RzIGluIEBkc3QgbGlua2luZyB0b1xubW0vcm1hcC5jLTI5NC0gKiBhbGwgb2YgdGhlIGFub25fdm1hIG9iamVjdHMgY29udGFpbmVkIHdpdGhpbiBAc3JjIGFub25fdm1hX2NoYWluJiMzOTtzLlxuLS1cbm1tL3JtYXAuYy0zMTktICovXG5tbS9ybWFwLmM6MzIwOmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG5tbS9ybWFwLmMtMzIxLVx0XHQgICBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxuLS1cbm1tL3JtYXAuYy0zMjUtXG5tbS9ybWFwLmM6MzI2Olx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XG5tbS9ybWFwLmMtMzI3LVxuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtNDAzLVx0ICovXG5tbS9ybWFwLmM6NDA0Olx0cmMgPSBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKTtcbm1tL3JtYXAuYy00MDUtXHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuLS1cbm1tL3JtYXAuYy00NDQtLypcbm1tL3JtYXAuYzo0NDU6ICogSW4gdGhlIHVuZm9ydHVuYXRlIGNhc2Ugb2YgYW5vbl92bWFfY2xvbmUoKSBmYWlsaW5nIHRvIGFsbG9jYXRlIG1lbW9yeSB3ZVxubW0vcm1hcC5jLTQ0Ni0gKiBoYXZlIHRvIGNsZWFuIHRoaW5ncyB1cC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIGBhbm9uX3ZtYV9jbG9uZWAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgYW5vbl92bWFfY2xvbmVgLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsIC0gaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwaWVjZSBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHV6emxlLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGNsb25pbmcgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLiBJIGltbWVkaWF0ZWx5IHJlY2FsbCBzZWVpbmcgaXQgdXNlZCBpbiBgYW5vbl92bWFfZm9ya2AuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaGludCBhdCBpdHMgcm9sZSBkdXJpbmcgcHJvY2VzcyBmb3JraW5nIGFuZCBjb3B5LW9uLXdyaXRlIG9wZXJhdGlvbnMuCgpHaXZlbiBpdHMgY3JpdGljYWwgbmF0dXJlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbml0dHktZ3JpdHR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9ybWFwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRldGFpbGVkIGltcGxlbWVudGF0aW9uIG9mIGBhbm9uX3ZtYV9jbG9uZWAgYW5kIGl0cyByZWxhdGVkIHN0cnVjdHVyZXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCByZXZlcnNlIG1hcCBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gcmVhbGx5IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMzIxOlx0XHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4gMzIyOlx0e1xuIDMyMzpcdFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpwYXZjO1xuIDMyNDpcdFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG4gMzI1Olx0XG4gMzI2Olx0XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdGlmICghYWN0aXZlX2Fub25fdm1hKVxuIDMyOTpcdFx0XHRyZXR1cm4gMDtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qXG4gMzMyOlx0XHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24mIzM5O3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXG4gMzMzOlx0XHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xuIDMzNDpcdFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cbiAzMzU6XHRcdCAqXG4gMzM2Olx0XHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxuIDMzNzpcdFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVx1MDAzZXZtX21tIGFuZCBkc3QgaXNcbiAzMzg6XHRcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJiMzOTtzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxuIDMzOTpcdFx0ICogdW5saW5rZWQgQVZDJiMzOTtzIGJlaW5nIG9ic2VydmVkIHlldC5cbiAzNDA6XHRcdCAqL1xuIDM0MTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwYXZjLCBcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzQyOlx0XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM0MzpcdFx0XHRpZiAoIWF2YylcbiAzNDQ6XHRcdFx0XHRnb3RvIGVub21lbV9mYWlsdXJlO1xuIDM0NTpcdFxuIDM0NjpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LypcbiAzNTA6XHRcdCAqIE5vdyBsaW5rIHRoZSBhbm9uX3ZtYSYjMzk7cyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIDM1MTpcdFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSYjMzk7cyBzaGFyZSB0aGUgc2FtZSByb290LlxuIDM1MjpcdFx0ICovXG4gMzUzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzU0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gMzU1Olx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gMzU2Olx0XG4gMzU3Olx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gMzU4Olx0XHRcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXG4gMzU5Olx0XHRcdFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XG4gMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLKVxuIDM2MzpcdFx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAzNjQ6XHRcbiAzNjU6XHRcdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuIDM2NjpcdFx0cmV0dXJuIDA7XG4gMzY3Olx0XG4gMzY4Olx0IGVub21lbV9mYWlsdXJlOlxuIDM2OTpcdFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xuIDM3MDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdC8qXG4gMzc0Olx0ICogQXR0YWNoIHZtYSB0byBpdHMgb3duIGFub25fdm1hLCBhcyB3ZWxsIGFzIHRvIHRoZSBhbm9uX3ZtYXMgdGhhdFxuIDM3NTpcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXG4gMzc2Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuXG4gMzc3Olx0ICovXG4gMzc4Olx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbiAzNzk6XHR7XG4gMzgwOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YztcbiAzODE6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7XG4gMzgyOlx0XHRpbnQgcmM7XG4gMzgzOlx0XG4gMzg0Olx0XHQvKiBEb24mIzM5O3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cbiAzODU6XHRcdGlmICghcHZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiAzODY6XHRcdFx0cmV0dXJuIDA7XG4gMzg3Olx0XG4gMzg4Olx0XHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbiAzODk6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG4gMzkwOlx0XG4gMzkxOlx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMzkyOlx0XHRpZiAoIWFub25fdm1hKVxuIDM5MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAzOTQ6XHRcdGF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpO1xuIDM5NTpcdFx0aWYgKCFhdmMpIHtcbiAzOTY6XHRcdFx0cHV0X2Fub25fdm1hKGFub25fdm1hKTtcbiAzOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzk4Olx0XHR9XG4gMzk5Olx0XG4gNDAwOlx0XHQvKlxuIDQwMTpcdFx0ICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSYjMzk7cyBhbm9uX3ZtYXMsXG4gNDAyOlx0XHQgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuXG4gNDAzOlx0XHQgKi9cbiA0MDQ6XHRcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG4gNDA1Olx0XHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xuIDQwNjpcdFx0aWYgKHJjIHx8IHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuIDQwNzpcdFx0XHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xuIDQwODpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7XG4gNDA5Olx0XHRcdHJldHVybiByYztcbiA0MTA6XHRcdH1cbiA0MTE6XHRcbiA0MTI6XHRcdC8qXG4gNDEzOlx0XHQgKiBPSyBubyByZXVzZSwgc28gYWRkIG91ciBvd24gYW5vbl92bWEuXG4gNDE0Olx0XHQgKlxuIDQxNTpcdFx0ICogU2luY2UgaXQgaXMgbm90IGxpbmtlZCBhbnl3aGVyZSB3ZSBjYW4gc2FmZWx5IG1hbmlwdWxhdGUgYW5vbl92bWFcbiA0MTY6XHRcdCAqIGZpZWxkcyB3aXRob3V0IGEgbG9jay5cbiA0MTc6XHRcdCAqL1xuIDQxODpcdFxuIDQxOTpcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzID0gMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGVgIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGNoYW5nZWQgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgLiBUaGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb246IGBzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWE7YCBIbW0sIHdoeSB0aGUgY2hhbmdlPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY291bGQgYHNyYy0mZ3Q7YW5vbl92bWFgIGNoYW5nZSBtaWQtZXhlY3V0aW9uPyBJdCBzaG91bGRuJiMzOTt0LCByaWdodD8gQnV0IG1heWJlIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZD8gCgpJIHF1aWNrbHkgcnVsZWQgb3V0IGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgYXMgdGhlIGN1bHByaXQsIHNpbmNlIHRoYXQmIzM5O3MganVzdCBhIGNoZWNrLiBUaGVuIEkgcmUtZXhhbWluZWQgdGhlIGNvZGUuIEkgc2VlIHRoYXQgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCB3aXRoIGB2bWEsIHB2bWEsIFZNQV9PUF9GT1JLYCBpbiBgYW5vbl92bWFfZm9ya2AsIGFuZCBgcHZtYWAgaXMgYHNyY2AuIFRoZSBtbWFwIGxvY2sgc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgZGF0YSByYWNlcy4gVGhlbiBJIHJlYWxpemVkIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSlgIHZzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGxpbmVzLiBJZiBgc3JjLSZndDthbm9uX3ZtYWAgKmRpZCogY2hhbmdlLCB0aGF0JiMzOTtkIGJlIGEgYnVnLiBUaGlzIGNoYW5nZSwgdGhlcmVmb3JlLCBtYXkgYmUgZml4aW5nIGEgbGF0ZW50IGJ1Zy4KCkJ1dCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzbiYjMzk7dCBwcm92aWRlZCwgc28gSSYjMzk7bSBsZWZ0IHRvIHdvbmRlcjogaW4gd2hhdCBzY2VuYXJpbyBjb3VsZCBgc3JjLSZndDthbm9uX3ZtYWAgYmUgZGlmZmVyZW50IGZyb20gYGFjdGl2ZV9hbm9uX3ZtYWA/IEl04oCZcyBub3QganVzdCBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgcmVhZC4gQ291bGQgdGhlcmUgYmUgYW4gYWxpYXNpbmcgaXNzdWU/IElmIGBzcmNgIGlzIHNvbWVob3cgYWxpYXNlZCB0byBgZHN0YCwgdGhlbiBgZHN0LSZndDthbm9uX3ZtYWAgbWlnaHQgYmUgbW9kaWZpZWQuIEFuZCB0aGlzIGFsc28gbWFrZXMgbWUgcmVtZW1iZXIgaG93IGluIGBhbm9uX3ZtYV9mb3JrYCwgYHZtYS0mZ3Q7YW5vbl92bWFgIGlzIHNldCB0byBgTlVMTGAgYmVmb3JlIGNhbGxpbmcgYGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspYC4gSWYgYHNyYyA9PSBkc3RgLCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAsIGJ1dCBgYWN0aXZlX2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAgdG9vLCBhbmQgaXQgd291bGQgcmV0dXJuIGVhcmx5LgoKVGhlbiwgd2FpdCBhIG1pbnV0ZSwgYGFub25fdm1hX2Nsb25lYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYHZtYV9leHBhbmRgLCBgdm1hX21lcmdlYCwgYHZtYV9zcGxpdGAsIGFuZCBvdGhlcnMhIFRoYXQgYnJvYWRlbnMgdGhlIHBvc3NpYmlsaXRpZXMgc2lnbmlmaWNhbnRseSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgYW5vbl92bWFfY2xvbmVgLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW5vbl92bWFfY2xvbmVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD0yNTE9ZW51bSB2bWFfb3BlcmF0aW9uIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTI1Ny1cbm1tL2ludGVybmFsLmg6MjU4OmludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG5tbS9pbnRlcm5hbC5oLTI1OS1cdGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pO1xuLS1cbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjM0LVxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbm1tL3JtYXAuYy0yMzYtXHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4tLVxubW0vcm1hcC5jPTI5MD1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5tbS9ybWFwLmMtMzE5LSAqL1xubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vcm1hcC5jLTMyMS1cdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbi0tXG5tbS9ybWFwLmMtMzI1LVxubW0vcm1hcC5jOjMyNjpcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xubW0vcm1hcC5jLTMyNy1cbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTQwMy1cdCAqL1xubW0vcm1hcC5jOjQwNDpcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XG5tbS9ybWFwLmMtNDA1LVx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cbi0tXG5tbS9ybWFwLmMtNDQ0LS8qXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2Vcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXG4tLVxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdm1hLmMtNTM1LVxubW0vdm1hLmM6NTM2Olx0ZXJyID0gYW5vbl92bWFfY2xvbmUobmV3LCB2bWEsIFZNQV9PUF9TUExJVCk7XG5tbS92bWEuYy01MzctXHRpZiAoZXJyKVxuLS1cbm1tL3ZtYS5jPTYxMj1zdGF0aWMgaW50IGR1cF9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcbi0tXG5tbS92bWEuYy02MzMtXHRcdGRzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbm1tL3ZtYS5jOjYzNDpcdFx0cmV0ID0gYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIFZNQV9PUF9NRVJHRV9VTkZBVUxURUQpO1xubW0vdm1hLmMtNjM1LVx0XHRpZiAocmV0KVxuLS1cbm1tL3ZtYS5jPTE4NjQ9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpjb3B5X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFwLFxuLS1cbm1tL3ZtYS5jLTE5MjktXHRcdFx0Z290byBvdXRfZnJlZV92bWE7XG5tbS92bWEuYzoxOTMwOlx0XHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxubW0vdm1hLmMtMTkzMS1cdFx0XHRnb3RvIG91dF9mcmVlX21lbXBvbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFub25fdm1hX2Nsb25lYCBGdW5jdGlvbiBhbmQgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIHdpdGggYFZNQV9PUF9TUExJVGAsIGBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEYCwgYFZNQV9PUF9SRU1BUGAsIGFuZCBgVk1BX09QX0ZPUktgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHJhbmdlIG9mIG9wZXJhdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGBhbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcywgYW5kIHRyeWluZyB0byBzcG90IGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzICpkdXJpbmcqIHRoZSBjbG9uaW5nIHByb2Nlc3M/IFRoZSBjb2RlIHNlZW1zIHRvIGFzc3VtZSBpdCYjMzk7cyBzdGFibGUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoYXQgc2hvdWxkIHByb3RlY3QgdXMgZnJvbSBtb2RpZmljYXRpb25zIHRvIGBzcmMtJmd0O2Fub25fdm1hYCBmcm9tIG90aGVyIHRocmVhZHMuIEdvb2QsIHRoYXQmIzM5O3Mgb25lIHBvdGVudGlhbCBpc3N1ZSBkb3duLgoKVGhlbiBJIHNoaWZ0ZWQgdG8gd29ycnlpbmcgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJlY2F1c2UgaXQgKmRvZXMqIGRlYWwgd2l0aCBgZHN0LSZndDthbm9uX3ZtYWAsIGFuZCBtYXliZSB0aGVyZSYjMzk7cyBhIHByb2JsZW0gaGVyZS4gQnV0IEkgcXVpY2tseSByZWFsaXplIGl0JiMzOTtzIG9ubHkgKmFzc2lnbmluZyogZmllbGRzIHdpdGhpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBhdmNgIHN0cnVjdHVyZTsgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IG1vZGlmeWluZyB0aGUgdW5kZXJseWluZyBgYW5vbl92bWFgIGRhdGEgc3RydWN0dXJlcywgc28gdGhhdCYjMzk7cyBub3QgYSByYWNlIGNvbmRpdGlvbiBlaXRoZXIuIFdlIGFyZSBzYWZlLCBmb3Igbm93LgoKSSB3ZW50IGJhY2sgYW5kIHJlLWV4YW1pbmVkIHRoZSBjb3JlIGxvb3AgaW4gYGFub25fdm1hX2Nsb25lYDoKCmBgYGMKCWxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewoJCWF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKEdGUF9LRVJORUwpOwoJCWlmICghYXZjKQoJCQlnb3RvIGVub21lbV9mYWlsdXJlOwoKCQlhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtJmd0O2Fub25fdm1hKTsKCX0KYGBgCgpOb3csIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBgc3JjYCBhbmQgYGRzdGAgY291bGQgYWN0dWFsbHkgYmUgdGhlIHNhbWUgVk1BPyBUaGVuIHRoYXQgd291bGQgY2F1c2UgcHJvYmxlbXMsIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4gQWgsIG5vLCB0aGUgY29kZSBleHBsaWNpdGx5IGNsb25lcyBWTUFzLiBTbyB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gKm11c3QqIGJlIGRpZmZlcmVudCBWTUFzLiBPaywgdGhhdCYjMzk7cyBmaW5lLgoKQnV0IHdoYXQgYWJvdXQgdGhlICpwb2ludGVyKiB0byBgc3JjLSZndDthbm9uX3ZtYWAgaXRzZWxmPyBDb3VsZCAqdGhhdCogYmUgbW9kaWZpZWQgYnkgc29tZXRoaW5nIGVsc2U/IExldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAgZnVuY3Rpb24gYWdhaW4sIHRvIG1ha2UgKmFic29sdXRlbHkqIHN1cmUgaXQmIzM5O3Mgbm90IGRvaW5nIGFueXRoaW5nIGRhbmdlcm91cy4gSXQgbG9va3MgbGlrZSBpdCBpcyBub3QsIHNvIHdlIGFyZSBzdGlsbCBnb29kLiBUaGlzIGxvb2tzIHNhZmUuIFRoZSBvcmlnaW5hbCBgYW5vbl92bWFgIHJlbWFpbnMgdW50b3VjaGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9jaGFpbl9hc3NpZ24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTE0NT1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9mcmVlKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYW5vbl92bWFfY2hhaW4pXG4tLVxubW0vcm1hcC5jLTE0OS1cbm1tL3JtYXAuYzoxNTA6c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTE1MS1cdFx0XHRcdCAgc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsXG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMTItXHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jOjIxMzpcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMjE0LVx0XHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFx1MDAyNmFub25fdm1hLVx1MDAzZXJiX3Jvb3QpO1xuLS1cbm1tL3JtYXAuYz0zMjA9aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9ybWFwLmMtMzQ1LVxubW0vcm1hcC5jOjM0NjpcdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKGRzdCwgYXZjLCBwYXZjLVx1MDAzZWFub25fdm1hKTtcbm1tL3JtYXAuYy0zNDctXHR9XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MzMtXHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYzo0MzQ6XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbm1tL3JtYXAuYy00MzUtXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gKioKCk9rYXksIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBmcm9tIGBtbS9ybWFwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0IOKAkyBpbiBtYW5hZ2luZyBhbm9ueW1vdXMgVk1BIG1hcHBpbmdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIHdpdGggdGhlIHJldmVyc2UgbWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgZm9yIGFub255bW91cyBtZW1vcnkuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlIGluIGVzdGFibGlzaGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGBhbm9uX3ZtYWAgc3RydWN0dXJlcywgVk1BcywgYW5kIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgY2hhaW5pbmcgYXNwZWN0LiBJIHJlY2FsbCB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgY2FuIGVmZmljaWVudGx5IHRyYWNrIHdoaWNoIHBhZ2VzIGJlbG9uZyB0byB3aGljaCBWTUFzLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMgb2YgY29weS1vbi13cml0ZSBvciBzaGFyZWQgbWFwcGluZ3MuIEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCBob3cgaXQgdXBkYXRlcyB0aGUgYGFub25fdm1hX2NoYWluYCBzdHJ1Y3R1cmVzIGFuZCB3aGV0aGVyIGl0IGhhbmRsZXMgYW55IHJhY2VzIG9yIGxvY2tpbmcuIFRoZSBnb2FsIGlzIHRvIHNvbGlkaWZ5IGhvdyB0aGUgd2hvbGUgcmV2ZXJzZSBtYXBwaW5nIGluZnJhc3RydWN0dXJlIGlzIG1haW50YWluZWQgYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgaW4gTlVNQSBvciBvdGhlciBjb21wbGV4IHNjZW5hcmlvcy4gSSBzaG91bGQgY29tcGFyZSBpdCB3aXRoIHRoZSBub24tYW5vbnltb3VzIFZNQXMgYW5kIHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBpbiBybWFwIHRvIHJlZnJlc2ggbXkgcmVjb2xsZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQ5Olx0XG4gMTUwOlx0c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fYXNzaWduKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDE1MTpcdFx0XHRcdFx0ICBzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YyxcbiAxNTI6XHRcdFx0XHRcdCAgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiAxNTM6XHR7XG4gMTU0Olx0XHRhdmMtXHUwMDNldm1hID0gdm1hO1xuIDE1NTpcdFx0YXZjLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG4gMTU2Olx0XHRsaXN0X2FkZChcdTAwMjZhdmMtXHUwMDNlc2FtZV92bWEsIFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbik7XG4gMTU3Olx0fVxuIDE1ODpcdFxuIDE1OTpcdC8qKlxuIDE2MDpcdCAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cbiAxNjE6XHQgKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvblxuIDE2MjpcdCAqXG4gMTYzOlx0ICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJiMzOTt2bWEmIzM5OyBoYXNcbiAxNjQ6XHQgKiBhbiAmIzM5O2Fub25fdm1hJiMzOTsgYXR0YWNoZWQgdG8gaXQsIHNvIHRoYXQgd2UgY2FuIGFzc29jaWF0ZSB0aGVcbiAxNjU6XHQgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLlxuIDE2NjpcdCAqXG4gMTY3Olx0ICogVGhlIGNvbW1vbiBjYXNlIHdpbGwgYmUgdGhhdCB3ZSBhbHJlYWR5IGhhdmUgb25lLCB3aGljaFxuIDE2ODpcdCAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzNjQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSYWNlcyBpbiBhbm9uX3ZtYV9jbG9uZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBwb3RlbnRpYWwgaXNzdWUuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAgd2FzIG1vZGlmeWluZyBgc3JjLSZndDthbm9uX3ZtYWAsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgcGFydCBpcyBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAuIFRoZSBxdWVzdGlvbiBpcywgd2h5IGFyZSB3ZSBsb2NraW5nIGBzcmMtJmd0O2Fub25fdm1hYD8gQ291bGQgYHNyY2AgYmUgZnJlZWQgb3IgbW9kaWZpZWQ/IE5vLCBpdCYjMzk7cyBhIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmAsIHdoaWNoIGlzIGdvb2QuCgpUaGVuIEkgZW50ZXJ0YWluZWQgdGhlIGlkZWEgdGhhdCBgc3JjYCBtaWdodCBiZSB0aGUgc2FtZSBhcyBgZHN0YCwgdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgYW4gaW5maW5pdGUgbG9vcC4gQnV0IGFmdGVyIHJldmlld2luZyB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgdXNhZ2UsIEkgZGV0ZXJtaW5lZCB0aGF0JiMzOTtzIG5vdCBwb3NzaWJsZSBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gVGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBkb2VzIGhhdmUgdGhlIHBvdGVudGlhbCB0byBsb29wIGluZmluaXRlbHkgaWYgd2UgYWRkIGFuIGVsZW1lbnQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGJ1dCBJJiMzOTttIHJlYXNvbmFibHkgc3VyZSB0aGF0IGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpZmZlcmVudC4KCk5leHQsIEkgY29uc2lkZXJlZCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXRzZWxmIGNvdWxkIGJlIG1vZGlmaWVkLiBJJiMzOTttIHdvbmRlcmluZyBpZiBhIHN1YnNlcXVlbnQgcmVhZCBvZiBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgcmVzdWx0IGluIGEgZGF0YSByYWNlLiBJZiBpdCAqaXMqIG1vZGlmaWVkLCBpdCBzZWVtcyBsaWtlIGEgYnVnLCBiZWNhdXNlIHRoZSBjb2RlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBhY2NvdW50IGZvciBzdWNoIGEgcG9zc2liaWxpdHkuIE15IHRob3VnaHQgaXMgdGhhdCBLQ1NBTiB3b3VsZCBmbGFnIGEgZGF0YSByYWNlIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzIG9uIGFub3RoZXIgdGhyZWFkLgoKSSB0aGVuIHJldmlzaXRlZCB0aGUgY29kZSwgYW5kIHJlYWxpemVkIGBzcmMtJmd0O2Fub25fdm1hYCAqY291bGQqIGJlIE5VTEwuIEJ1dCB0aGVyZSBpcyBhIGNoZWNrLCBgaWYgKCFhY3RpdmVfYW5vbl92bWEpIHJldHVybiAwO2AuIFN0aWxsLCB0aGUgcXVlc3Rpb24gb2Ygd2h5IGl0JiMzOTtzIGxvY2tlZCBmb3Igd3JpdGUsIGlzIGltcG9ydGFudC4KCkkgZHVnIGZ1cnRoZXIuIEluIGBhbm9uX3ZtYV9mb3JrYCwgYHZtYS0mZ3Q7YW5vbl92bWEgPSBOVUxMYCBpcyBjYWxsZWQgYW5kIHRoZW4gYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZC4gSSYjMzk7bSBjaGVja2luZyBvdGhlciBgVk1BX09QYHMgdG8gc2VlIGlmIHRoZXJlIGlzIHNpbWlsYXIgbG9naWMuCgpJIGFsc28gY2hlY2tlZCBmb3IgYFZNQV9PUF9TUExJVGAsIGBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEYCwgYFZNQV9PUF9SRU1BUGAsIGFuZCBmb3VuZCBzaW1pbGFyIHBhdHRlcm5zLiBJbiBhbGwgY2FzZXMsIGBzcmMtJmd0O2Fub25fdm1hYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQuCgpUaGUgbmV4dCB0aGluZyBJIHRob3VnaHQgb2Ygd2FzIHdoZXRoZXIgYHNyY2AgY291bGQgYmUgZnJlZWQuIEJ1dCwgbm8sIHdlIGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBpczogQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2Ugd2hlcmUgYSB0aHJlYWQgbW9kaWZpZXMgYHNyYy0mZ3Q7YW5vbl92bWFgPyBUaGUga2V5IGlzIHRoYXQgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgbG9jayBoZWxkICh3cml0ZSBsb2NrKSwgZXhjZXB0IGluIGBhbm9uX3ZtYV9mb3JrYCwgd2hlcmUgaXQmIzM5O3MgYSB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQuIEkgdGhlbiBjb25zaWRlcmVkIGlmIHRoZSBjaGlsZCBpcyBtb2RpZnlpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIGFmdGVyIHRoZSBjbG9uZS4gQnV0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBuZXZlciBtb2RpZmllZCBleGNlcHQgd2hlbiB0aGUgVk1BIGlzIGZyZWVkLCBzbyB0aGVyZSBjYW4mIzM5O3QgYmUgYSByYWNlLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGxvb2sgZm9yIHdoZXJlIHRoZSBgYW5vbl92bWFgICppcyogbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTE1ODI9c3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuLS1cbm1tL2tzbS5jLTE2MDEtXHQvKiBNdXN0IGdldCByZWZlcmVuY2UgdG8gYW5vbl92bWEgd2hpbGUgc3RpbGwgaG9sZGluZyBtbWFwX2xvY2sgKi9cbm1tL2tzbS5jOjE2MDI6XHRybWFwX2l0ZW0tXHUwMDNlYW5vbl92bWEgPSB2bWEtXHUwMDNlYW5vbl92bWE7XG5tbS9rc20uYy0xNjAzLVx0Z2V0X2Fub25fdm1hKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4tLVxubW0vbW1hcC5jPTE3MzE9X19sYXRlbnRfZW50cm9weSBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tKVxuLS1cbm1tL21tYXAuYy0xODAxLVx0XHRcdCAqL1xubW0vbW1hcC5jOjE4MDI6XHRcdFx0dG1wLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL21tYXAuYy0xODAzLVx0XHR9IGVsc2UgaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSlcbi0tXG5tbS9ybWFwLmM9MTUwPXN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMTU0LVx0YXZjLVx1MDAzZXZtYSA9IHZtYTtcbm1tL3JtYXAuYzoxNTU6XHRhdmMtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0xNTYtXHRsaXN0X2FkZChcdTAwMjZhdmMtXHUwMDNlc2FtZV92bWEsIFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbik7XG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMTEtXHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG5tbS9ybWFwLmM6MjEyOlx0XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0yMTMtXHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuLS1cbm1tL3JtYXAuYz0yNzA9c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vcm1hcC5jLTI4NS1cbm1tL3JtYXAuYzoyODY6XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy0yODctXHRhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtMzg4LVx0LyogRHJvcCBpbmhlcml0ZWQgYW5vbl92bWEsIHdlJiMzOTtsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXG5tbS9ybWFwLmM6Mzg5Olx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy0zOTAtXG4tLVxubW0vcm1hcC5jLTQzMi1cdC8qIE1hcmsgdGhpcyBhbm9uX3ZtYSBhcyB0aGUgb25lIHdoZXJlIG91ciBuZXcgKENPV2VkKSBwYWdlcyBnby4gKi9cbm1tL3JtYXAuYzo0MzM6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbm1tL3JtYXAuYy00MzQtXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9NDUyPXN0YXRpYyB2b2lkIGNsZWFudXBfcGFydGlhbF9hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTQ2NS1cdCAqL1xubW0vcm1hcC5jOjQ2NjpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtNDY3LX1cbi0tXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNTIxLVx0ICovXG5tbS9ybWFwLmM6NTIyOlx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy01MjMtXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbi0tXG5tbS92bWEuYz0xNDU9c3RhdGljIHZvaWQgaW5pdF9tdWx0aV92bWFfcHJlcChzdHJ1Y3Qgdm1hX3ByZXBhcmUgKnZwLFxuLS1cbm1tL3ZtYS5jLTE1My1cdHZwLVx1MDAzZXZtYSA9IHZtYTtcbm1tL3ZtYS5jOjE1NDpcdHZwLVx1MDAzZWFub25fdm1hID0gdm1hLVx1MDAzZWFub25fdm1hO1xubW0vdm1hLmMtMTU1LVxuLS1cbm1tL3ZtYS5jLTE3MS1cdGlmICghdnAtXHUwMDNlYW5vbl92bWEgXHUwMDI2XHUwMDI2IGFkanVzdClcbm1tL3ZtYS5jOjE3MjpcdFx0dnAtXHUwMDNlYW5vbl92bWEgPSBhZGp1c3QtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYy0xNzMtXG4tLVxubW0vdm1hLmM9NDM5PXN0YXRpYyBib29sIGNhbl92bWFfbWVyZ2VfcmlnaHQoc3RydWN0IHZtYV9tZXJnZV9zdHJ1Y3QgKnZtZyxcbi0tXG5tbS92bWEuYy00NTktXHRyZXR1cm4gIXByZXYtXHUwMDNlYW5vbl92bWEgfHwgIW5leHQtXHUwMDNlYW5vbl92bWEgfHxcbm1tL3ZtYS5jOjQ2MDpcdFx0cHJldi1cdTAwM2Vhbm9uX3ZtYSA9PSBuZXh0LVx1MDAzZWFub25fdm1hO1xubW0vdm1hLmMtNDYxLX1cbi0tXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vdm1hLmMtNjMyLVx0XHR2bWFfYXNzZXJ0X3dyaXRlX2xvY2tlZChkc3QpO1xubW0vdm1hLmM6NjMzOlx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYy02MzQtXHRcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcbi0tXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3ZtYV9pbml0LmMtNDctXHRkZXN0LVx1MDAzZXZtX2VuZCA9IHNyYy1cdTAwM2V2bV9lbmQ7XG5tbS92bWFfaW5pdC5jOjQ4Olx0ZGVzdC1cdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbm1tL3ZtYV9pbml0LmMtNDktXHRkZXN0LVx1MDAzZXZtX3Bnb2ZmID0gc3JjLVx1MDAzZXZtX3Bnb2ZmO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBhbm9uX3ZtYV9jbG9uZWAgYW5kIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgZmxvdyBmcm9tIGBkdXBfYW5vbl92bWFgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBgYW5vbl92bWFfY2xvbmVgLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRzdC0mZ3Q7YW5vbl92bWFgIGlzIGluaXRpYWxseSBhc3NpZ25lZCBgc3JjLSZndDthbm9uX3ZtYWAsIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIHRvIGNyZWF0ZSBhIGNvcHkgb3Igc2hhcmUgYW4gYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYW5vbl92bWFgIGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBkdXJpbmcgdGhpcyBjbG9uaW5nIHByb2Nlc3MuIEluc2lkZSBgYW5vbl92bWFfY2xvbmVgLCB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYCBhbmQgYWRkcyBlbnRyaWVzIHRvIGBkc3QtJmd0O2Fub25fdm1hX2NoYWluYC4gVGhhdCBtYWtlcyBzZW5zZSAtIHByb3BhZ2F0ZSB0aGUgbWFwcGluZ3MuIEFuZCBpdCBsb2NrcyBgc3JjLSZndDthbm9uX3ZtYWAgYmVmb3JlIHRoZSBsb29wLiBCdXQsIGlmIGEgbW9kaWZpY2F0aW9uIGhhcHBlbnMgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgLCB0aGF0IGlzIGEgcG90ZW50aWFsIHJhY2UuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyAqbm90KiBtb2RpZmllZCBiZXR3ZWVuIHdoZW4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYXNzaWduZWQgdG8gYHNyYy0mZ3Q7YW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCBpcyBjYWxsZWQuIFRoZSBvcmlnaW5hbCB0ZXh0IGNvbmZpcm1zIHRoaXMgaXNuJiMzOTt0IHBvc3NpYmxlLCBhcyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlIHNjb3BlIG9mIGBkdXBfYW5vbl92bWFgLgoKSG93ZXZlciwgdGhlIG1vcmUgSSBsb29rIGF0IHRoZSBjb2RlLCBpdCBoaXRzIG1lLiBJbiB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIHRoZSBjb2RlIGlzIGxvY2tpbmcgdGhlIGBzcmMtJmd0O2Fub25fdm1hYCBhbmQgaXQgc2VlbXMgb2RkOgoKKiAgIFRoZSBjb2RlIGdldHMgYGFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWFgLgoqICAgSXQgdGhlbiBsb2NrcyBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKTtgLgoqICAgRmluYWxseSwgdGhlIGNvZGUgdW5sb2NrcyBgYWN0aXZlX2Fub25fdm1hYCB3aXRoIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLgoKVGhpcyBsb29rcyBsaWtlIGEgY2xhc3NpYyBsb2NraW5nIGVycm9yIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBjaGFuZ2VzIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEhvd2V2ZXIsIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxseSBhc3NpZ25lZCB0aGUgc2FtZSB2YWx1ZSBhcyBgc3JjLSZndDthbm9uX3ZtYWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHNvbWVob3cgbW9kaWZpZWQgaW4gYmV0d2Vlbj8KClRoZSBgaWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylgIHN0YXRlbWVudCBjYXRjaGVzIG15IGV5ZS4gSWYgdGhlIG9wZXJhdGlvbiBpcyBhIGZvcmsgKGBWTUFfT1BfRk9SS2ApLCBgbWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSlgIGlzIGNhbGxlZC4gSSBuZWVkIHRvIGtub3csIGRvZXMgdGhpcyBmdW5jdGlvbiBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBBIG1vZGlmaWNhdGlvbiB0byBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aGluIHRoaXMgZnVuY3Rpb24gd291bGQgbGVhZCB0byBhIGxvY2svdW5sb2NrIG1pc21hdGNoISBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG1heWJlX3JldXNlX2Fub25fdm1hYCB0byBiZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjcxOlx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG4gMjcyOlx0e1xuIDI3MzpcdFx0LyogSWYgYWxyZWFkeSBwb3B1bGF0ZWQsIG5vdGhpbmcgdG8gZG8uKi9cbiAyNzQ6XHRcdGlmIChkc3QtXHUwMDNlYW5vbl92bWEpXG4gMjc1Olx0XHRcdHJldHVybjtcbiAyNzY6XHRcbiAyNzc6XHRcdC8qXG4gMjc4Olx0XHQgKiBXZSByZXVzZSBhbiBhbm9uX3ZtYSBpZiBhbnkgbGlua2luZyBWTUFzIHdlcmUgdW5tYXBwZWQgYW5kIGl0IGhhc1xuIDI3OTpcdFx0ICogb25seSBhIHNpbmdsZSBjaGlsZCBhdCBtb3N0LlxuIDI4MDpcdFx0ICovXG4gMjgxOlx0XHRpZiAoYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzIFx1MDAzZSAwKVxuIDI4MjpcdFx0XHRyZXR1cm47XG4gMjgzOlx0XHRpZiAoYW5vbl92bWEtXHUwMDNlbnVtX2NoaWxkcmVuIFx1MDAzZSAxKVxuIDI4NDpcdFx0XHRyZXR1cm47XG4gMjg1Olx0XG4gMjg2Olx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcbiAyODc6XHRcdGFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcyYjNDM7JiM0Mzs7XG4gMjg4Olx0fVxuIDI4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTEzMgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYG1heWJlX3JldXNlX2Fub25fdm1hYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGFub25fdm1hYCBzdHJ1Y3R1cmVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhYm91dCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkc3QtJmd0O2Fub25fdm1hYC4gVGhlIGNvcmUgcXVlc3Rpb24gaXM6IHdoYXQgaWYgYHNyY2AgYW5kIGBkc3RgIGFyZSB0aGUgc2FtZT8gQnV0LCB3YWl0LCB0aGF0JiMzOTtzIG5vdCBwb3NzaWJsZSBpbiBgYW5vbl92bWFfZm9ya2A7IGBzcmNgIGFuZCBgZHN0YCBhcmUgZGlzdGluY3QuCgpOZXh0IHRob3VnaHQ6IENvdWxkIGBzcmMtJmd0O2Fub25fdm1hYCBiZSBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGludGVyZmVyZXM/IEkgY29uc2lkZXJlZCBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYnV0IHRoYXQgdGFyZ2V0cyB0aGUgYGF2Yy0mZ3Q7YW5vbl92bWFgIGFuZCBgYXZjLSZndDt2bWFgLCBub3QgZGlyZWN0bHkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBTbywgdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLgoKTm93IEkmIzM5O20gZm9jdXNpbmcgb24gY29uY3VycmVuY3kuIENvdWxkIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gb2YgYHNyY2AgYmUgYSBwcm9ibGVtPyBJZiBzbywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBkYXRhIHJhY2UsIHJpZ2h0PyBBaCwgYW5kIEtDU0FOIChLZXJuZWwgQ29uY3VycmVuY3kgU2FuaXRpemVyKSBtaWdodCBmbGFnIGEgZGF0YSByYWNlIGV2ZW4gaWYgdGhlIHZhbHVlIGRvZXNuJiMzOTt0IGNoYW5nZSEgVGhhdCYjMzk7cyBpdCEgSSByZWNhbGwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGFjdHVhbGx5ICpyZWFkKiB0d2ljZTogb25jZSBhdCB0aGUgYmVnaW5uaW5nIHRvIGluaXRpYWxpemUgYGFjdGl2ZV9hbm9uX3ZtYWAsIGFuZCB0aGVuIGxhdGVyIHRvIGFjcXVpcmUgYSBsb2NrLgoKVGhlIGNvbXBpbGVyIGNvdWxkIHBvdGVudGlhbGx5IHJlbG9hZCB0aGUgdmFsdWUuIEJ1dCwgbW9yZSBpbXBvcnRhbnRseSwgaWYgYW5vdGhlciB0aHJlYWQgaXMgcG90ZW50aWFsbHkgd3JpdGluZyB0byBgc3JjLSZndDthbm9uX3ZtYWAgd2hpbGUgdGhpcyBpcyBoYXBwZW5pbmcsIEtDU0FOIGlzIGdvaW5nIHRvIHNxdWF3aywgZXZlbiBpZiB0aGUgcmVhZCB2YWx1ZSByZW1haW5zIHRoZSBzYW1lLiBUaGUgc2Vjb25kIHJlYWQgb2YgYHNyYy0mZ3Q7YW5vbl92bWFgIGZvciB0aGUgbG9jaywgdGhhdCYjMzk7cyB0aGUgdGVsbC4gSWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGJlaW5nIHJlYWQgdHdpY2UsIEtDU0FOIHdpbGwgY29tcGxhaW4gaWYgdGhlcmUmIzM5O3MgYSBjb25jdXJyZW50IHdyaXRlLgoKU28sIGlmIHRoZXJlJiMzOTtzICpubyogY29uY3VycmVudCB3cml0ZSwgS0NTQU4gd29uJiMzOTt0IGZsYWcgYW55dGhpbmcuIEJ1dCBpZiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdpbGwgZmxhZyB0aGUgZG91YmxlIHJlYWQuCgpPa2F5LCBpcyBgc3JjLSZndDthbm9uX3ZtYWAgbW9kaWZpZWQgYnkgYGNoZWNrX2Fub25fdm1hX2Nsb25lYD8gQmV0dGVyIGNoZWNrIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aGVyZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4gMjQ1Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgIWxpc3RfZW1wdHkoXHUwMDI2c3JjLVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ2Olx0XHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgZHN0LVx1MDAzZWFub25fdm1hKTtcbiAyNDc6XHRcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXG4gMjQ4Olx0XHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluKSk7XG4gMjQ5Olx0XHQvKlxuIDI1MDpcdFx0ICogT24gZm9yaywgZHN0LVx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcbiAyNTE6XHRcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxuIDI1MjpcdFx0ICovXG4gMjUzOlx0XHRWTV9XQVJOX09OX09OQ0UoZHN0LVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNlYW5vbl92bWEgIT0gc3JjLVx1MDAzZWFub25fdm1hKTtcbiAyNTQ6XHRcdC8qXG4gMjU1Olx0XHQgKiBFc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIGFib3ZlIC0gaWYgbm90IGEgbm8tb3AsIHdlIHNob3VsZCBleHBlY3RcbiAyNTY6XHRcdCAqIGRzdC1cdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cbiAyNTc6XHRcdCAqL1xuIDI1ODpcdFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcdTAwMjZcdTAwMjYgc3JjLVx1MDAzZWFub25fdm1hIFx1MDAyNlx1MDAyNlxuIDI1OTpcdFx0XHRcdCFkc3QtXHUwMDNlYW5vbl92bWEpO1xuIDI2MDpcdFx0LyogRm9yIHRoZSBhbm9uX3ZtYSB0byBiZSBjb21wYXRpYmxlLCBpdCBjYW4gb25seSBiZSBzaW5ndWxhci4gKi9cbiAyNjE6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gPT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjI6XHRcdFx0XHQhbGlzdF9pc19zaW5ndWxhcihcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcbiAyNjM6XHQjaWZkZWYgQ09ORklHX1BFUl9WTUFfTE9DS1xuIDI2NDpcdFx0LyogT25seSBtZXJnaW5nIGFuIHVuZmF1bHRlZCBWTUEgbGVhdmVzIHRoZSBkZXN0aW5hdGlvbiBhdHRhY2hlZC4gKi9cbiAyNjU6XHRcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX01FUkdFX1VORkFVTFRFRCBcdTAwMjZcdTAwMjZcbiAyNjY6XHRcdFx0XHR2bWFfaXNfYXR0YWNoZWQoZHN0KSk7XG4gMjY3Olx0I2VuZGlmXG4gMjY4Olx0fVxuIDI2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcyMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDc1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBgYW5vbl92bWFfY2xvbmVgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIGFuZCBteSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgaXQgKnNob3VsZG4mIzM5O3QqIGJlIG1vZGlmeWluZyBgc3JjLSZndDthbm9uX3ZtYWAgZGlyZWN0bHkuIEJ1dCB0aGVuLCBteSBtaW5kIHJhY2VzIOKAkyB3aGF0IGlmIGFub3RoZXIgdGhyZWFkIHdlcmUgdG8gbW9kaWZ5IGBzcmMtJmd0O2Fub25fdm1hYD8gVGhhdCB3b3VsZCBiZSBhIHNlcmlvdXMgYnVnLCBnaXZlbiB3ZSBob2xkIHRoZSBtbWFwIGxvY2ssIHJpZ2h0PyBUaGUgc3lzdGVtIHNob3VsZCBub3QgYWxsb3cgdGhlIHN0YXRlIHRvIGNoYW5nZSB3aXRoIHRoZSBsb2NrIGluIHBsYWNlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhIGJpdC4gSXMgaXQgZXZlbiAqcG9zc2libGUqIGZvciBgc3JjYCBpdHNlbGYgdG8gYmUgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQ/IFRoYXQgc2VlbXMgdW5saWtlbHksIGJ1dCBJIGhhdmUgdG8gYmUgdGhvcm91Z2guIE9rYXksIHNvIGxvb2tpbmcgYXQgdGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXRzZWxmLCBJIHNlZSB0aGlzOgoKYGBgYwoJYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKTsKLi4uCglhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTsKYGBgCgpTbywgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBiZWluZyBjYWxsZWQgb24gYHNyYy0mZ3Q7YW5vbl92bWFgLiBJZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgcmVhZCB0d2ljZSwgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIGl0LCBhbmQgaXQgaGFwcGVucyB0byBiZSBtb2RpZmllZCBpbiBiZXR3ZWVuLCBpdCB3b3VsZCBsb2NrIG9uZSB2ZXJzaW9uIG9mIHRoZSBhbm9uX3ZtYSBhbmQgdW5sb2NrIGFub3RoZXIhIFRoYXQgc291bmRzIHJlYWxseSBiYWQuIEhvd2V2ZXIsIGlmIGl0JiMzOTtzIG5vdCBtb2RpZmllZCwgdGhlbiB3aHkgaXMgdGhlIHZhcmlhYmxlIGNoYW5nZWQgYXQgYWxsPyBJdCBmZWVscyBsaWtlIGp1c3QgYSBjbGVhbnVwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBpdCB3b3VsZG4mIzM5O3QgYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSYjMzk7bSBwcm9iYWJseSBtaXNzaW5nIHNvbWV0aGluZy4KCkJ1dCB0aGVuLCB3YWl0IGEgbWludXRlLi4uIHdoYXQgaWYgYHNyY2AgaXMgYWN0dWFsbHkgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYGRzdC0mZ3Q7YW5vbl92bWFgICppcyogbW9kaWZpZWQgaW5zaWRlIGBtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyEgSWYgYHNyYyA9PSBkc3RgLCB0aGVuLCB5ZXMsIGBzcmMtJmd0O2Fub25fdm1hYCAqaXMqIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgZnVuY3Rpb24uIFNvLCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAgd291bGQgbG9jayB0aGUgKm9sZCogYGFub25fdm1hYCBwb3RlbnRpYWxseSwgYnV0IHRoZW4gSSByZW1lbWJlciDigJMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGlzIGNhbGxlZCBCRUZPUkUgdGhhdCBsb29wLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bGwgY29kZSBibG9jazoKCmBgYGMKCWFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCAmYW1wO2RzdC0mZ3Q7YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7CgkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy0mZ3Q7YW5vbl92bWE7CgoJCWFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgJmFtcDthbm9uX3ZtYS0mZ3Q7cmJfcm9vdCk7CgkJaWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSykKCQkJbWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7Cgl9CgoJaWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSykKCQlkc3QtJmd0O2Fub25fdm1hLSZndDtudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7OwoKCWFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpOwpgYGAKClNvLCBub3cgSSBzZWUgdGhhdCBgYW5vbl92bWFfbG9ja193cml0ZWAgKmlzKiBjYWxsZWQgKmJlZm9yZSogdGhlIGxvb3Agd2hlcmUgYG1heWJlX3JldXNlX2Fub25fdm1hYCBpcyBjYWxsZWQsIGFuZCBldmVuIGlmIGBzcmMgPT0gZHN0YCwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHJlYWQgYmVmb3JlIHRoZSBtb2RpZmljYXRpb24uIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4KCkJ1dCwgd2FpdC4uLiBjb3VsZCBgZHN0LSZndDthbm9uX3ZtYWAgYmUgbW9kaWZpZWQgYnkgdGhpcyBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2A/IElmIGBzcmMgPT0gZHN0YCwgd291bGQgdGhlIHZhbHVlIG9mIGBzcmMtJmd0O2Fub25fdm1hYCBnZXQgcmVhZCBhZ2FpbiBpbiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWA/IE5vLCBiZWNhdXNlIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBzdGlsbCBjYWxsZWQgYmVmb3JlIHRoYXQgbGluZSBvZiBjb2RlLgoKT2theSwgaXMgaXQgcG9zc2libGUgdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXMgZXZhbHVhdGVkICp3aXRoaW4qIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCBmdW5jdGlvbiYjMzk7cyBjb2RlIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGFub25fdm1hX2xvY2tfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKgoKQWxyaWdodCwgdGhlIHF1ZXJ5IGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzLCBhbmQgdGhlICYjMzQ7bG9ja193cml0ZSYjMzQ7IHBhcnQgaW1wbGllcyBhIHdyaXRlLXJlbGF0ZWQgbG9ja2luZyBtZWNoYW5pc20uIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgY3JpdGljYWwgZm9yIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiBhbm9ueW1vdXMgbWVtb3J5IHJlZ2lvbnMsIGxpa2VseSBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIHBhZ2UgZmF1bHQgaGFuZGxpbmcsIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiAoc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVk1BIGl0c2VsZiksIG9yIHBlcmhhcHMgZXZlbiB3aGVuIGhhbmRsaW5nIGNvcHktb24td3JpdGUgc2NlbmFyaW9zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgdXNlZCB0byBjb25maXJtIHRob3NlIGluaXRpYWwgYXNzdW1wdGlvbnMuIFRpbWUgdG8gaGl0IHRoZSBjb2RlIHNlYXJjaC4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwNzEtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6NDA3MjpcdFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQwNzMtXHRcdG1hcHBpbmcgPSBOVUxMO1xuLS1cbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTIxNy1cbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXG5tbS9pbnRlcm5hbC5oLTIxOS17XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEyNzg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzNDktXG5tbS9raHVnZXBhZ2VkLmM6MTM1MDpcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL2todWdlcGFnZWQuYy0xMzUxLVx0YW5vbl92bWFfbG9ja2VkID0gdHJ1ZTtcbi0tXG5tbS9tcmVtYXAuYz0xNDM9c3RhdGljIHZvaWQgdGFrZV9ybWFwX2xvY2tzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21yZW1hcC5jLTE0Ny1cdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpXG5tbS9tcmVtYXAuYzoxNDg6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL21yZW1hcC5jLTE0OS19XG4tLVxubW0vcm1hcC5jPTExMD1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfZnJlZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuLS1cbm1tL3JtYXAuYy0xMzItXHRpZiAocndzZW1faXNfbG9ja2VkKFx1MDAyNmFub25fdm1hLVx1MDAzZXJvb3QtXHUwMDNlcndzZW0pKSB7XG5tbS9ybWFwLmM6MTMzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy0xMzQtXHRcdGFub25fdm1hX3VubG9ja193cml0ZShhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy0yMDctXG5tbS9ybWFwLmM6MjA4Olx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMjA5LVx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXG4tLVxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcbi0tXG5tbS9ybWFwLmMtNDM1LVx0LyogTm93IGxldCBybWFwIHNlZSBpdC4gKi9cbm1tL3JtYXAuYzo0MzY6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbm1tL3JtYXAuYy00MzctXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFx1MDAyNmFub25fdm1hLVx1MDAzZXJiX3Jvb3QpO1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbi0tXG5tbS9ybWFwLmM9NjMzPXN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTY4OS1cdFx0ICogYW5kIGJhaWwgLS0gY2FuJiMzOTt0IHNpbXBseSB1c2UgcHV0X2Fub25fdm1hKCkgYmVjYXVzZVxubW0vcm1hcC5jOjY5MDpcdFx0ICogd2UmIzM5O2xsIGRlYWRsb2NrIG9uIHRoZSBhbm9uX3ZtYV9sb2NrX3dyaXRlKCkgcmVjdXJzaW9uLlxubW0vcm1hcC5jLTY5MS1cdFx0ICovXG4tLVxubW0vdm1hLmM9MjkxPXN0YXRpYyB2b2lkIHZtYV9wcmVwYXJlKHN0cnVjdCB2bWFfcHJlcGFyZSAqdnApXG4tLVxubW0vdm1hLmMtMzEzLVx0aWYgKHZwLVx1MDAzZWFub25fdm1hKSB7XG5tbS92bWEuYzozMTQ6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUodnAtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzE1LVx0XHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX3ByZV91cGRhdGVfdm1hKHZwLVx1MDAzZXZtYSk7XG4tLVxubW0vdm1hLmM9MzExNz1pbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS92bWEuYy0zMTY1LVx0LyogV2UgdXBkYXRlIHRoZSBhbm9uIFZNQSB0cmVlLiAqL1xubW0vdm1hLmM6MzE2NjpcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVx1MDAzZWFub25fdm1hKTtcbm1tL3ZtYS5jLTMxNjctXG4tLVxubW0vdm1hLmM9MzIwMz1pbnQgZXhwYW5kX2Rvd253YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbm1tL3ZtYS5jLTMyNDQtXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXG5tbS92bWEuYzozMjQ1Olx0YW5vbl92bWFfbG9ja193cml0ZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xubW0vdm1hLmMtMzI0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBhbiBpbmxpbmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGltbWVkaWF0ZWx5LiBJdCYjMzk7cyBwcm9iYWJseSByZWxhdGl2ZWx5IHNob3J0IGFuZCBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwuIFRoZSBjb21waWxlciBpcyBnb2luZyB0byB0cnkgdG8gc3Vic3RpdHV0ZSB0aGUgZnVuY3Rpb24mIzM5O3MgY29kZSBkaXJlY3RseSB3aGVyZXZlciBpdCYjMzk7cyBjYWxsZWQgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhbmQgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBtbS9pbnRlcm5hbC5oYCBjb25maXJtcyBteSBpbml0aWFsIGh5cG90aGVzaXMgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgd29ya2luZ3MuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGxvY2tpbmcgYW5kIHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfbG9ja193cml0ZShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxuIDIxOTpcdHtcbiAyMjA6XHRcdGRvd25fd3JpdGUoXHUwMDI2YW5vbl92bWEtXHUwMDNlcm9vdC1cdTAwM2Vyd3NlbSk7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdHN0YXRpYyBpbmxpbmUgaW50IGFub25fdm1hX3RyeWxvY2tfd3JpdGUoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcbiAyMjQ6XHR7XG4gMjI1Olx0XHRyZXR1cm4gZG93bl93cml0ZV90cnlsb2NrKFx1MDAyNmFub25fdm1hLVx1MDAzZXJvb3QtXHUwMDNlcndzZW0pO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRGF0YSBSYWNlcyBpbiBgYW5vbl92bWFfY2xvbmVgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvc3NpYmxlIGRhdGEgcmFjZSByZXBvcnRlZCBieSBLQ1NBTi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgdGhlIHVzZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgYW5kIHRoZSBgYW5vbl92bWFfbG9ja193cml0ZWAgZnVuY3Rpb24uIFRoZSBpbml0aWFsIGNvbmNlcm4gaXMgdGhhdCByZWFkaW5nIGBzcmMtJmd0O2Fub25fdm1hYCB0d2ljZSBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLCBvciBpbmRpY2F0ZSBhIHJlYWwgYnVnIGlmIGl0JiMzOTtzIG1vZGlmaWFibGUuIExldCYjMzk7cyB0cmFjZSBpdCBjYXJlZnVsbHkuCgpGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc3JjYCBwb2ludGVyIGRvZXNuJiMzOTt0IGdldCBtb2RpZmllZCBieSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYW5kIGluZGVlZCwgdGhhdCBmdW5jdGlvbiB0b3VjaGVzIGBhdmMtJmd0O3ZtYWAgYW5kIGBhdmMtJmd0O2Fub25fdm1hYCwgbm90IHRoZSBzb3VyY2UuICBXYWl0LCBpZiBgc3JjID09IGRzdGAsIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgd291bGQgY3JlYXRlIGFuIGluZmluaXRlIGxvb3AsIHNvIHRoZSBjb21waWxlciB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGlzLCBidXQgdGhlIGZ1bmN0aW9uIHdvdWxkIGJlIHZlcnkgcHJvYmxlbWF0aWMuICBTbyBgc3JjYCBjYW5ub3QgYmUgZXF1YWwgdG8gYGRzdGAuCgpJIHdhcyBhbHNvIGFza2luZyBteXNlbGYgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNhbiBiZSBtb2RpZmllZCBlbHNld2hlcmUgaW4gYGFub25fdm1hX2Nsb25lYC4gIEl0IHNlZW1zIG5vLiBUaGUgY29tcGlsZXIgcmVsb2FkcyBtaWdodCBiZSBhIHByb2JsZW0sIGJ1dCBpdCYjMzk7cyBub3QuIFRoZW4sIGl0IGhpdHMgbWUgdGhhdCBgZHVwX2Fub25fdm1hYCBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiBCdXQsIGhlcmUgYHNyY2AgYW5kIGBkc3RgIGFyZSBkaWZmZXJlbnQuIEFsc28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBzcmNgIGlzIGZyZWVkLCBidXQgd2UgYXJlIGhvbGRpbmcgdGhlIG1tYXAgbG9jay4KClNvIHRoZSBtYWluIHRoaW5nIEkgbmVlZCB0byBjb25maXJtIGlzIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZCBjb25jdXJyZW50bHkuIFRoZSBjb2RlIGNvbW1lbnRzIGluIGBhbm9uX3ZtYV9jbG9uZWAgdGFsayBhYm91dCB0aGUgbW1hcCBsb2NrLiBJdCBzYXlzICYjMzQ7RWl0aGVyIHNyYywgZHN0IGhhdmUgdGhlIHNhbWUgbW0gZm9yIHdoaWNoIHdlIGhvbGQgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jayYjMzQ7LiBUaGlzIHNlZW1zIHByZXR0eSBkZWZpbml0aXZlLiAgV2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrLCBubyBvdGhlciB0aHJlYWQgc2hvdWxkIGJlIGFibGUgdG8gdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGF0IGxvY2sgaXMgaGVsZCBkdXJpbmcgYFZNQV9PUF9TUExJVGAgYW5kIGluIGBfX3NwbGl0X3ZtYWAsIHNvIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgYSBwcm9ibGVtLgoKTm93LCBJIHdhcyB0aGlua2luZyBhYm91dCBgcGFnZV9mYXVsdGAuIGBwYWdlX2ZhdWx0YCB1c2VzIHRoZSBtbWFwIHJlYWQgbG9jay4gSWYgd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrLCBgcGFnZV9mYXVsdGAgY2FuJiMzOTt0IHJ1biBjb25jdXJyZW50bHkuIEJ1dCwgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjb25maXJtcyB0aGF0IHRoZSB3cml0ZSBsb2NrIGlzIEFMV0FZUyBoZWxkLCBzbyBvdGhlciB0aHJlYWRzIGNhbm5vdCBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBJdCBpcyBqdXN0IGEgYHZvaWRgIHRoYXQgb25seSBkb2VzIGEgYFZNX1dBUk5fT05fT05DRWAuCgpXYWl0LCBjb3VsZCBzb21ldGhpbmcgZWxzZSBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBOby4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhbHdheXMgaW4gYGRzdC0mZ3Q7YW5vbl92bWFgLiBUaGUgbWFpbiBxdWVzdGlvbiBpcyB0aGF0IHRoZSBsb2NrIGlzIGhlbGQsIHNvIGl0IHNob3VsZCBiZSBmaW5lLiAgTm93LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGlzLgoKQnV0IHRoZW4gSSByZWFsaXplLiBXYWl0ISBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXM6IGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIGFzIGBzcmMtJmd0O2Fub25fdm1hYCBpbiB0aGUgZnVuY3Rpb24uCgpTbywgdW5sZXNzIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4gY2hhbmdlLCB0aGlzIGRvZXNuJiMzOTt0IG1hdHRlci4gVGhlIG5leHQgdGhpbmcgSSByZWFsaXplZCBpcyB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBjb3VsZCBoYXZlIGEgcHJvYmxlbSBpZiBhbm90aGVyIHRocmVhZCBpcyBtb2RpZnlpbmcgdGhlIHZhcmlhYmxlIGluIHRoZSBsb29wLgoKVGhlIHNvbHV0aW9uIGlzIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCwgbm93IEkmIzM5O20gdGhpbmtpbmcgd2hldGhlciBgc3JjLSZndDthbm9uX3ZtYWAgY291bGQgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHBlci1WTUEgbG9jayEgIEl0IGxvb2tzIGxpa2UgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgcGFnZSBmYXVsdHMsIHVzaW5nIHRoZSBwZXItVk1BIGxvY2ssIGNhbiBtb2RpZnkgYSBgdm1hLSZndDthbm9uX3ZtYWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtMjExLVx0aWYgKGxpa2VseSghdm1hLVx1MDAzZWFub25fdm1hKSkge1xubW0vcm1hcC5jOjIxMjpcdFx0dm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG5tbS9ybWFwLmMtMjEzLVx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbi0tXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXG4tLVxubW0vcm1hcC5jLTM4OC1cdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSYjMzk7bGwgcmV1c2UgZXhpc3Rpbmcgb3IgYWxsb2NhdGUgbmV3LiAqL1xubW0vcm1hcC5jOjM4OTpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtMzkwLVxuLS1cbm1tL3JtYXAuYy00MzItXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXG5tbS9ybWFwLmM6NDMzOlx0dm1hLVx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XG5tbS9ybWFwLmMtNDM0LVx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTQ1Mj1zdGF0aWMgdm9pZCBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00NjUtXHQgKi9cbm1tL3JtYXAuYzo0NjY6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTQ2Ny19XG4tLVxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTUyMS1cdCAqL1xubW0vcm1hcC5jOjUyMjpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IE5VTEw7XG5tbS9ybWFwLmMtNTIzLVx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0Mzg3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBWTUEgTG9ja2luZyoqCgpPa2F5LCB3YWl0IGEgbWludXRlLiBMb29raW5nIGF0IHRoaXMgY29kZSwgYF9fYW5vbl92bWFfcHJlcGFyZWAgY2xlYXJseSBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYHZtYS0mZ3Q7YW5vbl92bWFgIHN0cnVjdHVyZS4gVGhhdOKAmXMgYSBrZXkgcGllY2UuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCB0aGUgb25lIHRoYXQgcmVhbGx5IG1hdHRlcnMgZm9yIHN0YWJpbGl0eSBhbmQgY29uY3VycmVuY3kgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnVuY3Rpb24sIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBpcyBvcGVyYXRpbmcgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YgdGhlIHBlci1WTUEgbG9jay4gSWYgaXQmIzM5O3Mgbm90LCB3ZSBoYXZlIGEgc2VyaW91cyBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gdGhhdCBuZWVkcyBpbW1lZGlhdGUgaW52ZXN0aWdhdGlvbi4gUmlnaHQsIHRpbWUgdG8gZGl2ZSBiYWNrIGludG8gdGhlIGNvZGUgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpdHNlbGYgdG8gY29uZmlybSB3aGV0aGVyIHRoZSByaWdodCBsb2NrcyBhcmUgYmVpbmcgaGVsZCB3aGVuIGl0IG1vZGlmaWVzIHRoZSBgdm1hLSZndDthbm9uX3ZtYWAuIEkmIzM5O2xsIHZlcmlmeSB0aGlzIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYW5vbl92bWFfcHJlcGFyZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTI2MD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKTtcbm1tL2ludGVybmFsLmg6MjYxOmludCAgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbm1tL2ludGVybmFsLmgtMjYyLXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vaW50ZXJuYWwuaD0yNjQ9c3RhdGljIGlubGluZSBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9pbnRlcm5hbC5oLTI2OC1cbm1tL2ludGVybmFsLmg6MjY5Olx0cmV0dXJuIF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xubW0vaW50ZXJuYWwuaC0yNzAtfVxuLS1cbm1tL21lbW9yeS5jPTM3OTM9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zODEwLSAqIG9ubHkgcHJvdGVjdGVkIGJ5IHRoZSBwZXItVk1BIGxvY2ssIHRoZSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZVxubW0vbWVtb3J5LmM6MzgxMTogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG5tbS9tZW1vcnkuYy0zODEyLSAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCYjMzk7cyBub3Qgc2FmZSB0b1xuLS1cbm1tL21lbW9yeS5jPTM4MTg9dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtMzgyOC1cdH1cbm1tL21lbW9yeS5jOjM4Mjk6XHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXG5tbS9tZW1vcnkuYy0zODMwLVx0XHRyZXQgPSBWTV9GQVVMVF9PT007XG4tLVxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTE1OS0vKipcbm1tL3JtYXAuYzoxNjA6ICogX19hbm9uX3ZtYV9wcmVwYXJlIC0gYXR0YWNoIGFuIGFub25fdm1hIHRvIGEgbWVtb3J5IHJlZ2lvblxubW0vcm1hcC5jLTE2MS0gKiBAdm1hOiB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBxdWVzdGlvblxuLS1cbm1tL3JtYXAuYy0xODQtICovXG5tbS9ybWFwLmM6MTg1OmludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9ybWFwLmMtMTg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYF9fdm1mX2Fub25fcHJlcGFyZWAgZnVuY3Rpb24sIGFuZCB0aGUgY29tbWVudCBpcyBpbW1lZGlhdGVseSB0aHJvd2luZyB1cCBhIGZsYWcuIEl0IHNheXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpvbmx5KiBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIHJlLWV2YWx1YXRlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBsb2Nrcy4gSXQgYWxzbyBzYXlzIHRoYXQgYSBjYWxsZXIgbXVzdCByZXRyeSB3aXRoIHRoZSBgbW1hcF9sb2NrYCBoZWxkLiBXaHk/IEFoLCBpdCYjMzk7cyBiZWNhdXNlIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgd2l0aGluIHRoaXMgZnVuY3Rpb24gY2hlY2tzICphZGphY2VudCogVk1BcyB0byBzZWUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBgYW5vbl92bWFgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgdHJ5aW5nIHRvIGxvb2sgYXQgbmVpZ2hib3JpbmcgbWVtb3J5IHJlZ2lvbnMgd2hpbGUgaG9sZGluZyBvbmx5IGEgcGVyLVZNQSBsb2NrLiBJdCYjMzk7cyBub3Qgc2FmZS4KClNvLCBpZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCBpcyB1bnNhZmUgdG8gY2FsbCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrLCBkb2VzIGB2bWZfYW5vbl9wcmVwYXJlYCB0aGVuIHJldHVybiBgVk1fRkFVTFRfUkVUUllgIGlmIGNhbGxlZCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrPyBJdCBzZWVtcyBsaWtlbHkuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODEwOlx0ICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXG4zODExOlx0ICogbW1hcF9sb2NrIGhlbGQuICBfX2Fub25fdm1hX3ByZXBhcmUoKSB3aWxsIGxvb2sgYXQgYWRqYWNlbnQgVk1BcyB0b1xuMzgxMjpcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCYjMzk7cyBub3Qgc2FmZSB0b1xuMzgxMzpcdCAqIGRvIHdpdGggb25seSB0aGUgcGVyLVZNQSBsb2NrIGhlbGQgZm9yIHRoaXMgVk1BLlxuMzgxNDpcdCAqXG4zODE1Olx0ICogUmV0dXJuOiAwIGlmIGZhdWx0IGhhbmRsaW5nIGNhbiBwcm9jZWVkLiAgQW55IG90aGVyIHZhbHVlIHNob3VsZCBiZVxuMzgxNjpcdCAqIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuXG4zODE3Olx0ICovXG4zODE4Olx0dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4zODE5Olx0e1xuMzgyMDpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuMzgyMTpcdFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuMzgyMjpcdFxuMzgyMzpcdFx0aWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKVxuMzgyNDpcdFx0XHRyZXR1cm4gMDtcbjM4MjU6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4MjY6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzgyNzpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4Mjg6XHRcdH1cbjM4Mjk6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4MzA6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzgzMTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4MzI6XHRcdFx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuMzgzMzpcdFx0cmV0dXJuIHJldDtcbjM4MzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGFub25fdm1hX2Nsb25lYCBhbmQgUG90ZW50aWFsIERhdGEgUmFjZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byBgc3JjLSZndDthbm9uX3ZtYWAuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBfX3ZtZl9hbm9uX3ByZXBhcmVgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jaywgaW1wbHlpbmcgdGhhdCBgdm1hLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IG1vZGlmaWVkIHVuZGVyIGp1c3QgdGhlIHBlci1WTUEgbG9jay4gVGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLCBzdWdnZXN0aW5nIHRoYXQgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWAgY29uY3VycmVudGx5LgoKQnV0IHdhaXQsIHdoeSB3YXMgYHNyYy0mZ3Q7YW5vbl92bWFgIGNoYW5nZWQgdG8gYGFjdGl2ZV9hbm9uX3ZtYWA/IExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoOiBgc3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSBzcmMtJmd0O2Fub25fdm1hO2AuIEhtbSwgd2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgTlVMTD8gVGhlIGNoZWNrIGBpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkgcmV0dXJuIDA7YCBoYW5kbGVzIHRoYXQgY2FzZSBlYXJseS4gU28sIGF0IGxlYXN0IGluaXRpYWxseSwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBOVUxMLgoKQ291bGQgc29tZXRoaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgIGl0c2VsZiBhbHRlciBgc3JjLSZndDthbm9uX3ZtYWA/IFRoZSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uIHNlZW1zIGlubm9jdW91cywganVzdCBhIGJ1bmNoIG9mIGBWTV9XQVJOX09OX09OQ0VgIGNhbGxzLiBJdCBjYW4mIzM5O3QgY2hhbmdlIGl0LiBUaGVuIHdoYXQgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmA/IENvdWxkIHRoYXQgbW9kaWZ5IGBzcmMtJmd0O2Fub25fdm1hYD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQgb3BlcmF0ZXMgb24gYGRzdC0mZ3Q7YW5vbl92bWFfY2hhaW5gLCBub3QgYHNyYy0mZ3Q7YW5vbl92bWFgLiBJdCBpcyBsb29raW5nIGF0IHRoZSBjaGFpbiB3aXRoaW4gYHNyY2AsIGJ1dCB0aGF0IGlzIGEgY2hhaW4gb2YgYGFub25fdm1hYCBvYmplY3RzLgoKSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHNyY2AgY291bGQgYmUgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYSBsb29wIG1pZ2h0IGhhcHBlbiB3aXRoIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBgZHVwX2Fub25fdm1hYCBmdW5jdGlvbiBzZXRzIGBkc3QtJmd0O2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYWAgYmVmb3JlIGNhbGxpbmcgYGFub25fdm1hX2Nsb25lYCwgc28gdGhlIGxvY2sgd291bGQgcHJldmVudCBhbnkgaXNzdWVzLiBMb29raW5nIGluc2lkZSBgYW5vbl92bWFfY2xvbmVgJiMzOTtzLCBhZnRlciB0aGUgY2xvbmUsIGBkc3QtJmd0O2Fub25fdm1hLSZndDtudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7YCBpcyBleGVjdXRlZC4gSW4gdGhpcyBjYXNlLCBgc3JjLSZndDthbm9uX3ZtYWAmIzM5O3MgYG51bV9hY3RpdmVfdm1hc2AgaXMgbW9kaWZpZWQgYW5kIHRoaXMgY291bGQgZ2l2ZSBhIGZhbHNlIHNlbnNlIG9mIGEgZGF0YSByYWNlLiBIb3dldmVyLCB0aGlzIG9ubHkgbW9kaWZpZXMgYSB2YWx1ZSwgbm90IHRoZSBwb2ludGVyIGl0c2VsZi4KClRoZW4gdGhlIGtleSBxdWVzdGlvbjogQ291bGQgYSBLQ1NBTiBjb21wbGFpbnQgYmUgZHVlIHRvIGFub3RoZXIgdGhyZWFkIHJlYWRpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgPyBSZW1lbWJlciwgYGFub25fdm1hX2Nsb25lYCByZWFkcyBgc3JjLSZndDthbm9uX3ZtYWAgdHdpY2UuIEhvd2V2ZXIsIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0byBgc3JjLSZndDthbm9uX3ZtYWAgc2luY2Ugd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrISBUaGUgYGFub25fdm1hX2ZvcmtgIGZ1bmN0aW9uIGRvZXMgY2FsbCBgYW5vbl92bWFfY2xvbmVgLCBob3dldmVyIHRoZSBgc3JjYCBWTUEgaXMgbG9ja2VkLiBTbyB0aGUgcGFyZW50IGNhbm5vdCBtb2RpZnkgaXQuCgpTbywgaW4gdGhlb3J5LCBpZiBhIGRpZmZlcmVudCB0aHJlYWQgaXMgcmVhZGluZyBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aG91dCBhIGxvY2ssIHRoZXJlIG1pZ2h0IGJlIGEgZGF0YSByYWNlLiBCdXQsIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYW5kIHRoZSBwYXJlbnQgaXMgYWxzbyBsb2NrZWQuIFNvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCgpMZXQgbWUgc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UuIEFoYSEgVGhlIGNvbW1pdCBgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5Y2AgY2hhbmdlcyB0aGUgbG9jay4gV2h5IHdhcyB0aGF0IG5lZWRlZD8gTGV0JiMzOTtzIGxvb2sgYWdhaW46CmBgYGMKCXN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYTsKLi4uCglhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7CmBgYAoKV2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgTlVMTCBhdCB0aGUgdGltZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWA/CkhvdyBjb3VsZCBpdCBiZSBOVUxMPwpJZiBgc3JjYCBpcyBgZHN0YD8gTm8uCklmIGBzcmNgIGlzIG1vZGlmaWVkPwoKTG9va2luZyBhdCBjYWxscyB0byBgYW5vbl92bWFfY2xvbmVgLCB0aGUgYHNyY2AgYW5kIGBkc3RgIHZtX2FyZWFzIGFyZSBhbHdheXMgZGlmZmVyZW50LgpTbyBgc3JjYCBuZXZlciBjaGFuZ2VzLiBUaHVzLCBgc3JjLSZndDthbm9uX3ZtYWAgc2hvdWxkIG5ldmVyIGJlIG1vZGlmaWVkLiBBbmQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzIwOlx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbiAzMjE6XHRcdFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAzMjI6XHR7XG4gMzIzOlx0XHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XG4gMzI0Olx0XHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbiAzMjU6XHRcbiAzMjY6XHRcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xuIDMyNzpcdFxuIDMyODpcdFx0aWYgKCFhY3RpdmVfYW5vbl92bWEpXG4gMzI5Olx0XHRcdHJldHVybiAwO1xuIDMzMDpcdFxuIDMzMTpcdFx0LypcbiAzMzI6XHRcdCAqIEFsbG9jYXRlIEFWQ3MuIFdlIGRvbiYjMzk7dCBuZWVkIGFuIGFub25fdm1hIGxvY2sgZm9yIHRoaXMgYXMgd2VcbiAzMzM6XHRcdCAqIGFyZSBub3QgdXBkYXRpbmcgdGhlIGFub25fdm1hIHJidHJlZSBub3IgYXJlIHdlIGNoYW5naW5nXG4gMzM0Olx0XHQgKiBhbm9uX3ZtYSBzdGF0aXN0aWNzLlxuIDMzNTpcdFx0ICpcbiAzMzY6XHRcdCAqIEVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwXG4gMzM3Olx0XHQgKiB3cml0ZSBsb2NrLCBvciB3ZSBhcmUgZm9ya2luZyBhbmQgd2UgaG9sZCBpdCBvbiBzcmMtXHUwMDNldm1fbW0gYW5kIGRzdCBpc1xuIDMzODpcdFx0ICogbm90IHlldCBhY2Nlc3NpYmxlIHRvIG90aGVyIHRocmVhZHMgc28gdGhlcmUmIzM5O3Mgbm8gcG9zc2libGlpdHkgb2YgdGhlXG4gMzM5Olx0XHQgKiB1bmxpbmtlZCBBVkMmIzM5O3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxuIDM0MDpcdFx0ICovXG4gMzQxOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiAzNDI6XHRcdFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XG4gMzQzOlx0XHRcdGlmICghYXZjKVxuIDM0NDpcdFx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cdTAwM2Vhbm9uX3ZtYSk7XG4gMzQ3Olx0XHR9XG4gMzQ4Olx0XG4gMzQ5Olx0XHQvKlxuIDM1MDpcdFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJiMzOTtzIGJhY2sgdG8gdGhlIG5ld2x5IGluc2VydGVkIEFWQ3MuXG4gMzUxOlx0XHQgKiBOb3RlIHRoYXQgYWxsIGFub25fdm1hJiMzOTtzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXG4gMzUyOlx0XHQgKi9cbiAzNTM6XHRcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiAzNTQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiAzNTU6XHRcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiAzNTY6XHRcbiAzNTc6XHRcdFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyYl9yb290KTtcbiAzNTg6XHRcdFx0aWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylcbiAzNTk6XHRcdFx0XHRtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKTtcbiAzNjA6XHRcdH1cbiAzNjE6XHRcbiAzNjI6XHRcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXG4gMzYzOlx0XHRcdGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMmIzQzOyYjNDM7O1xuIDM2NDpcdFxuIDM2NTpcdFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gMzY2Olx0XHRyZXR1cm4gMDtcbiAzNjc6XHRcbiAzNjg6XHQgZW5vbWVtX2ZhaWx1cmU6XG4gMzY5Olx0XHRjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNTc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1c3BlY3RlZCBEYXRhIFJhY2UqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gVGhpcyBwYXRjaCBjaGFuZ2VkIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgdGhlIHNhbWUgYXMgYHNyYy0mZ3Q7YW5vbl92bWFgLiBTbywgd2h5IHRoZSBjaGFuZ2U/CgpGaXJzdCwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBvYnZpb3VzLiBDb3VsZCBgc3JjLSZndDthbm9uX3ZtYWAgYmUgbW9kaWZpZWQgZGlyZWN0bHkgYnkgc29tZSBvdGhlciBmdW5jdGlvbiBsaWtlIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hc2AsIG9yIGBhbm9uX3ZtYV9jaGFpbl9hbGxvY2A/IE5vLCB0aG9zZSBkb24mIzM5O3QgdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLgoKTm93LCB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2UgY29uZGl0aW9uIGtlZXBzIHBvcHBpbmcgaW50byBteSBoZWFkLiBJcyBpdCBwb3NzaWJsZSBhIGNvbmN1cnJlbnQgdGhyZWFkIGNvdWxkIG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWA/IE5vLCB3YWl0ISBJJiMzOTt2ZSBiZWVuIHRocm91Z2ggdGhpcyBiZWZvcmUuIFdlICpzaG91bGQqIGJlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAsIHdoaWNoIHdvdWxkIHByZXZlbnQgYW55IG90aGVyIHRocmVhZCBmcm9tIG1vZGlmeWluZyBpdCBjb25jdXJyZW50bHkuCgpCdXQuLi4gaGFuZyBvbi4gVGhlIGNvbW1lbnQgaGVyZS4uLiBzYXlzIHNvbWV0aGluZyBhYm91dCBhbGxvY2F0aW5nIEFWQ3MuIEl0IHN0YXRlcywgYW5kIEkgcXVvdGUsICYjMzQ7V2UgZG9uJiMzOTt0IG5lZWQgYW4gYW5vbl92bWEgbG9jayBmb3IgdGhpcyBhcyB3ZSBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZyBhbm9uX3ZtYSBzdGF0aXN0aWNzLiYjMzQ7IE9rYXksIHNvIHRoZSBsb2NrIGlzbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZWQqIGZvciBBVkMgYWxsb2NhdGlvbiBpdHNlbGYuIFRoZSBjb21tZW50IHRoZW4gc3RhdGVzIGVpdGhlciBgc3JjYCwgYGRzdGAgaGF2ZSB0aGUgc2FtZSBtbSB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2ssIG9yIGlmIGZvcmtpbmcsIHdlIGhvbGQgaXQgb24gYHNyYy0mZ3Q7dm1fbW1gLgoKU28sIGluICphbGwqIGNhc2VzIOKAkyB3aGV0aGVyIGl0JiMzOTtzIHRoZSBzYW1lIG1lbW9yeSBtYXAgb3Igd2UgYXJlIGZvcmtpbmcg4oCTIHdlIHNob3VsZCBiZSBob2xkaW5nIHRoYXQgbW1hcCB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYC4gU28sIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB0b3VjaCBgc3JjLSZndDthbm9uX3ZtYWAhCgpUaGVuIHdoeSB0aGUgY2hhbmdlPyBJcyB0aGlzIGEgS0NTQU4gZGF0YSByYWNlIGRldGVjdGlvbiB0aGluZz8gS0NTQU4gcGlja3MgdXAgYSByYWNlIHdoZW4gdGhlcmUgaXMgYSBjb25jdXJyZW50IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbiwgYnV0IHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYSBjb25jdXJyZW50IHdyaXRlIGhlcmUhIFRoZSB3cml0ZSBsb2NrICpzaG91bGQqIGd1YXJhbnRlZSB0aGF0LgoKT2theSwgbGV0IG1lIHRoaW5rLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyB3cml0dGVuIGJ5IGEgdGhyZWFkIHRoYXQgZG9lcyAqbm90KiBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2s/IFRoaXMgbWFrZXMgbWUgdGhpbmsgLSBpcyB0aGVyZSBhbnkgY29kZSBpbiB0aGUgY29kZWJhc2UgdGhhdCB3cml0ZXMgdG8gYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGhvdXQgaG9sZGluZyB0aGF0IHdyaXRlIGxvY2s/IEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGFzc2lnbm1lbnRzIGxpa2UgYHZtYS0mZ3Q7YW5vbl92bWEgPWAgYW5kIHRoZW4gcmV2aWV3IHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSB3cml0ZXMgdG8gdmVyaWZ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWEtXHUwMDNlYW5vbl92bWEgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIxMS1cdGlmIChsaWtlbHkoIXZtYS1cdTAwM2Vhbm9uX3ZtYSkpIHtcbm1tL3JtYXAuYzoyMTI6XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jLTIxMy1cdFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy0zODgtXHQvKiBEcm9wIGluaGVyaXRlZCBhbm9uX3ZtYSwgd2UmIzM5O2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cbm1tL3JtYXAuYzozODk6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTM5MC1cbi0tXG5tbS9ybWFwLmMtNDMyLVx0LyogTWFyayB0aGlzIGFub25fdm1hIGFzIHRoZSBvbmUgd2hlcmUgb3VyIG5ldyAoQ09XZWQpIHBhZ2VzIGdvLiAqL1xubW0vcm1hcC5jOjQzMzpcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xubW0vcm1hcC5jLTQzNC1cdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xuLS1cbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNDY1LVx0ICovXG5tbS9ybWFwLmM6NDY2Olx0dm1hLVx1MDAzZWFub25fdm1hID0gTlVMTDtcbm1tL3JtYXAuYy00NjctfVxuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy01MjEtXHQgKi9cbm1tL3JtYXAuYzo1MjI6XHR2bWEtXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xubW0vcm1hcC5jLTUyMy1cdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmN1cnJlbmN5IENvbmNlcm5zIGluIEFub255bW91cyBWTSBBcmVhIFByZXBhcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIEkgc2VlIHRoYXQgYF9fYW5vbl92bWFfcHJlcGFyZWAgZ2V0cyBjYWxsZWQgZnJvbSBgdm1mX2Fub25fcHJlcGFyZWAuIEhtbSwgaW50ZXJlc3RpbmcuIEFuZCBgdm1mX2Fub25fcHJlcGFyZWAsIGZyb20gd2hhdCBJIHJlbWVtYmVyLCBnZXRzIHRyaWdnZXJlZCBkdXJpbmcgYSBwYWdlIGZhdWx0LCByaWdodD8gVGhhdCYjMzk7cyB3aGVuIHRoZSBrZXJuZWwgaXMgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgcGh5c2ljYWwgcGFnZSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nIOKAkyBkdXJpbmcgYSBwYWdlIGZhdWx0LCB3ZSYjMzk7cmUgaG9sZGluZyB0aGUgbW1hcCBSRUFEIGxvY2suCgoqV2FpdCBhIG1pbnV0ZSEqIElmIHRoZSBtbWFwIFJFQUQgbG9jayBpcyBoZWxkLCB0aGF0IG1lYW5zIG11bHRpcGxlIHRocmVhZHMgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBleGVjdXRpbmcgYF9fYW5vbl92bWFfcHJlcGFyZWAgY29uY3VycmVudGx5ISBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHJhY2UgY29uZGl0aW9ucyBpZiB3ZSBhcmUgbm90IGNhcmVmdWwsIGFuZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgcmVjaXBlIGZvciBkaXNhc3Rlci4gSSBoYWQgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYW5vbl92bWFfcHJlcGFyZWAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHRocmVhZC1zYWZlLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgaGFuZGxpbmcgY29uY3VycmVudCBhY2Nlc3MgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIG9wZXJhdGluZyBvbiBhbm9ueW1vdXMgbWVtb3J5IHJlZ2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcm1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODU6XHRpbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIDE4ODpcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSwgKmFsbG9jYXRlZDtcbiAxODk6XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xuIDE5MDpcdFxuIDE5MTpcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbiAxOTI6XHRcdG1pZ2h0X3NsZWVwKCk7XG4gMTkzOlx0XG4gMTk0Olx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcbiAxOTU6XHRcdGlmICghYXZjKVxuIDE5NjpcdFx0XHRnb3RvIG91dF9lbm9tZW07XG4gMTk3Olx0XG4gMTk4Olx0XHRhbm9uX3ZtYSA9IGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHZtYSk7XG4gMTk5Olx0XHRhbGxvY2F0ZWQgPSBOVUxMO1xuIDIwMDpcdFx0aWYgKCFhbm9uX3ZtYSkge1xuIDIwMTpcdFx0XHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XG4gMjAyOlx0XHRcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxuIDIwMzpcdFx0XHRcdGdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YztcbiAyMDQ6XHRcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2NoaWxkcmVuJiM0MzsmIzQzOzsgLyogc2VsZi1wYXJlbnQgbGluayBmb3IgbmV3IHJvb3QgKi9cbiAyMDU6XHRcdFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XG4gMjA2Olx0XHR9XG4gMjA3Olx0XG4gMjA4Olx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcbiAyMDk6XHRcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xuIDIxMDpcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gMjExOlx0XHRpZiAobGlrZWx5KCF2bWEtXHUwMDNlYW5vbl92bWEpKSB7XG4gMjEyOlx0XHRcdHZtYS1cdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xuIDIxMzpcdFx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcbiAyMTQ6XHRcdFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcdTAwMjZhbm9uX3ZtYS1cdTAwM2VyYl9yb290KTtcbiAyMTU6XHRcdFx0YW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzOztcbiAyMTY6XHRcdFx0YWxsb2NhdGVkID0gTlVMTDtcbiAyMTc6XHRcdFx0YXZjID0gTlVMTDtcbiAyMTg6XHRcdH1cbiAyMTk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMjc3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbnVuZHJ1bSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBDb25jdXJyZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgYW5kIHRoZSBjb2RlIG1ha2VzIG1lIHBhdXNlLiBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGB2bWEtJmd0O2Fub25fdm1hYCB3aGlsZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jay4gQW5kIGl0JiMzOTtzIHVzaW5nIGBzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKWAgdG8gbWFrZSBzdXJlIG90aGVyIHRocmVhZHMgZG9uJiMzOTt0IG1lc3Mgd2l0aCBgdm1hLSZndDthbm9uX3ZtYWAgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGFub3RoZXIgdGhyZWFkIGhhbmRsaW5nIGEgcGFnZSBmYXVsdCAqY291bGQqIGJlIGNoYW5naW5nIGB2bWEtJmd0O2Fub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBUaGF0JiMzOTtzIHdoYXQgdGhlIGxvY2tpbmcgc3VnZ2VzdHMuCgpCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgYW5vbl92bWFfY2xvbmVgIGhhcyB0aGlzIGBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLSZndDt2bV9tbSlgIGFzc2VydGlvbi4gSXQgKnJlcXVpcmVzKiB0aGUgbW1hcCBXUklURSBsb2NrLiBJZiB0aGF0IGxvY2sgaXMgaGVsZCwgdGhlbiBieSBkZWZpbml0aW9uLCAqbm8qIG90aGVyIHRocmVhZCBjYW4gYmUgaG9sZGluZyB0aGUgbW1hcCBSRUFEIGxvY2sgc2ltdWx0YW5lb3VzbHkuCgpUaGVyZWZvcmUsIGlmIGBhbm9uX3ZtYV9jbG9uZWAgaXMgZXhlY3V0aW5nLCBpdCBzZWVtcyBpbXBvc3NpYmxlIGZvciBgX19hbm9uX3ZtYV9wcmVwYXJlYCB0byBiZSBydW5uaW5nIGNvbmN1cnJlbnRseSEgQW5kIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4mIzM5O3QgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGVzZSB0d28gc2VlbWluZ2x5IGNvbmZsaWN0aW5nIG9ic2VydmF0aW9ucyBqdXN0IGRvbiYjMzk7dCBhZGQgdXAhCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbiYjMzk7dCBzb21lIGVkZ2UgY2FzZSwgb3Igc29tZSBvdGhlciBjb2RlIHBhdGgsIHdoZXJlIGBhbm9uX3ZtYV9jbG9uZWAgZ2V0cyBjYWxsZWQgKndpdGhvdXQqIHRoZSB3cml0ZSBsb2NrIGhlbGQuIE1heWJlIHNvbWV0aGluZyBpbiBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGNhbiByZXNvbHZlIHRoaXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjM1Olx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4gMjM2Olx0XHRcdFx0XHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gMjM3Olx0XHRcdFx0XHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcbiAyMzg6XHR7XG4gMjM5Olx0XHQvKiBUaGUgd3JpdGUgbG9jayBtdXN0IGJlIGhlbGQuICovXG4gMjQwOlx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKTtcbiAyNDE6XHRcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXG4gMjQyOlx0XHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFx1MDAyNlx1MDAyNiBkc3QtXHUwMDNldm1fbW0gIT0gc3JjLVx1MDAzZXZtX21tKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTY2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBhbm9uX3ZtYWAgTG9ja2luZyBpbiBgZHVwX2Fub25fdm1hYCBhbmQgYGFub25fdm1hX2Nsb25lYCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy0mZ3Q7dm1fbW0pO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiB0aGUgc291cmNlIFZNQSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUgKGBzcmMtJmd0O3ZtX21tYCkuIFRoaXMgaXMga2V5LiBJdCBtZWFucyB0aGF0LCBpbiBwcmluY2lwbGUsIGBzcmMtJmd0O2Fub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLiAKClRoZSBxdWVzdGlvbiBpcywgd2h5IHdhcyB0aGVyZSBhIGNoYW5nZSBmcm9tIGxvY2tpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIGRpcmVjdGx5IHRvIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgLCB3aGljaCBpcyBpbml0aWFsaXplZCBhcyBgc3JjLSZndDthbm9uX3ZtYWA/IElmIGBzcmMtJmd0O2Fub25fdm1hYCBjYW4mIzM5O3QgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LCB0aGVuIHVzaW5nIGBhY3RpdmVfYW5vbl92bWFgIHNob3VsZCBiZSBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsLgoKTXkgbGluZSBvZiByZWFzb25pbmcgaXMsICppZiogYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBjaGFuZ2luZyBiZXR3ZWVuIHdoZW4gaXQmIzM5O3MgcmVhZCB0byBpbml0aWFsaXplIGBhY3RpdmVfYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBjYWxsZWQsIHRoZW4gdGhlcmUmIzM5O3Mgbm8gcHJvYmxlbS4gSSYjMzk7bSBtZW50YWxseSB3YWxraW5nIHRocm91Z2ggcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMuIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gIG9wZXJhdGVzIG9uIHRoZSBkZXN0aW5hdGlvbiYjMzk7cyBjaGFpbi4gYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCBkb2VzbiYjMzk7dCBtb2RpZnkgdGhlIHNvdXJjZSYjMzk7cyBgYW5vbl92bWFgLiBUaGUgc2FtZSBnb2VzIGZvciBgbWF5YmVfcmV1c2VfYW5vbl92bWFgLgoKVGhlbiwgSSBicmllZmx5IGNvbnNpZGVyZWQgYW4gYWxpYXMgc2l0dWF0aW9uOyBpZiBgc3JjYCBhbmQgYGRzdGAgd2VyZSB0aGUgc2FtZSwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgKmRpZCogcG90ZW50aWFsbHkgbW9kaWZ5IGBkc3QtJmd0O2Fub25fdm1hYCwgdGhlbiBpdCB3b3VsZCBiZSBhIHByb2JsZW0uIEJ1dCBJJiMzOTttIHF1aWNrbHkgZGlzbWlzc2luZyB0aGlzIHNpbmNlIGl0JiMzOTtzIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCBgc3JjYCBhbmQgYGRzdGAgYXJlICphbHdheXMqIGRpZmZlcmVudC4gQWxzbywgSSYjMzk7bSBjaGVja2luZyB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBub3QgYSBtYWNybyBhbmQgaXMgYSBmaWVsZCB3aXRoaW4gYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAuCgpUaGVuLCBJIGJyaWVmbHkgY29uc2lkZXIgYSBjb21waWxlciBpc3N1ZTsgSSYjMzk7bSBlbGltaW5hdGluZyB0aGUgcG9zc2liaWxpdHkgb2YgYSBkYXRhIHJhY2UgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIHJlYWQgdHdpY2UgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIHRoZSB2YWx1ZS4gS0NTQU4gd291bGRuJiMzOTt0IGZsYWcgYSByYWNlIGlmIG5vIGNvbmN1cnJlbnQgd3JpdGVyIGV4aXN0cy4gU2luY2UgdGhlIHdyaXRlIGxvY2sgaXMgaGVsZCwgdGhlcmUmIzM5O3Mgbm8gY29uY3VycmVudCB3cml0ZXIuIFNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgYHNyY2AgaXMgaW4gYSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIChgbW1gKS4gVGhlbiwgdGhlIGFuYWx5c2lzIGlzIGFib3V0IGBhbm9uX3ZtYV9mb3JrYCBhbmQgd2hldGhlciBhIHBhcmVudCYjMzk7cyBWTUEgY291bGQgYmUgbW9kaWZpZWQgYnkgYSBjaGlsZC4gVGhpcyBpcyBhbHNvIGltcG9zc2libGUgYmVjYXVzZSBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQmIzM5O3MgYG1tYC4KClRoZW4sIEkmIzM5O20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBgYW5vbl92bWFfbG9ja193cml0ZWAgYW5kIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGVgLiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgb25seSB0YWtlIHRoZSBwb2ludGVyIHRvIGBzdHJ1Y3QgYW5vbl92bWFgIGFuZCBkb24mIzM5O3QgbW9kaWZ5IHRoZSBwb2ludGVyIGl0c2VsZi4gVGhlcmVmb3JlLCB0aGV5IGNhbiYjMzk7dCBjaGFuZ2Ugd2hhdCBgc3JjLSZndDthbm9uX3ZtYWAgKnBvaW50cyB0byouCgpPa2F5LCBzbyBJIHdlbnQgYmFjayB0byB0aGUgcGF0Y2ggYW5kIEkgcmVhbGl6ZWQgdGhlcmUmIzM5O3MgYSBwcm9ibGVtOiB0aGUgKm9yaWdpbmFsKiBjb2RlIGxvY2tlZCBgc3JjLSZndDthbm9uX3ZtYWAgYW5kIHVubG9ja2VkIGBhY3RpdmVfYW5vbl92bWFgLiBUaGUgcmVmYWN0b3JpbmcgaW5pdGlhbGl6ZXMgYGFjdGl2ZV9hbm9uX3ZtYWAgZnJvbSBgc3JjLSZndDthbm9uX3ZtYWAuIE5vdyBpdCAqc2hvdWxkbiYjMzk7dCBtYXR0ZXIqIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyAqZGlmZmVyZW50KiBmcm9tIGBhY3RpdmVfYW5vbl92bWFgLiBCdXQgaG93IGNvdWxkIHRoZXkgYmUgZGlmZmVyZW50PyBJJiMzOTttIHJlY2hlY2tpbmcgdGhlIGNvZGUgaW4gYGR1cF9hbm9uX3ZtYWAuCgpgZHVwX2Fub25fdm1hYCBzZXRzIGBkc3QtJmd0O2Fub25fdm1hID0gc3JjLSZndDthbm9uX3ZtYWAgYW5kIHRoZW4gY2FsbHMgYGFub25fdm1hX2Nsb25lYC4gKkluc2lkZSogYGFub25fdm1hX2Nsb25lYCwgdGhlIGNvZGUgdGhlbiBnZXRzIGEgbG9jYWwgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5pdGlhbGl6ZWQgd2l0aCBgc3JjLSZndDthbm9uX3ZtYWAgKHdoaWNoIGlzIGBkc3QtJmd0O2Fub25fdm1hYCkuIFRoZW4gdGhlIGNvZGUgY2FsbHMgYGFub25fdm1hX2Nsb25lYCB3aGljaCAqZG9lcyogYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy0mZ3Q7YW5vbl92bWEpYCAtIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gYGRzdC0mZ3Q7YW5vbl92bWFgIGlmIGBzcmMgPT0gZHN0YC4gSW5zaWRlIHRoaXMgZnVuY3Rpb24gdGhlcmUmIzM5O3MgYWxzbyB0aGUgbGluZSBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2Agd2hpY2ggKmRvZXMqIG1vZGlmeSBgZHN0LSZndDthbm9uX3ZtYWAuIFNvIHRoaXMgbWVhbnMgdGhhdCBpZiBgc3JjYCBpcyBhbiBhbGlhcyBmb3IgYGRzdGAsIHRoZW4gYHNyYy0mZ3Q7YW5vbl92bWFgIGdldHMgbW9kaWZpZWQuCgpCdXQgSSBrZWVwIHRoaW5raW5nIHRoYXQgSSBlc3RhYmxpc2hlZCBlYXJsaWVyIHRoYXQgdGhleSBhcmUgKmFsd2F5cyogZGlmZmVyZW50Li4uIFVubGVzcy4uLiAqdW5sZXNzKiB0aGUgc2FtZSBWTUEgaXMgcGFzc2VkIHRvIGBhbm9uX3ZtYV9jbG9uZWAgYXMgYm90aCBgc3JjYAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2Nsb25lXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MjUxPWVudW0gdm1hX29wZXJhdGlvbiB7XG4tLVxubW0vaW50ZXJuYWwuaC0yNTctXG5tbS9pbnRlcm5hbC5oOjI1ODppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxubW0vaW50ZXJuYWwuaC0yNTktXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcbi0tXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vcm1hcC5jLTIzNC1cbm1tL3JtYXAuYzoyMzU6c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG5tbS9ybWFwLmMtMjM2LVx0XHRcdFx0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4tLVxubW0vcm1hcC5jLTMxOS0gKi9cbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbm1tL3JtYXAuYy0zMjEtXHRcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXG4tLVxubW0vcm1hcC5jLTMyNS1cbm1tL3JtYXAuYzozMjY6XHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcbm1tL3JtYXAuYy0zMjctXG4tLVxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxuLS1cbm1tL3JtYXAuYy00MDMtXHQgKi9cbm1tL3JtYXAuYzo0MDQ6XHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xubW0vcm1hcC5jLTQwNS1cdC8qIEFuIGVycm9yIGFyb3NlIG9yIGFuIGV4aXN0aW5nIGFub25fdm1hIHdhcyByZXVzZWQsIGFsbCBkb25lIHRoZW4uICovXG4tLVxubW0vcm1hcC5jLTQ0NC0vKlxubW0vcm1hcC5jOjQ0NTogKiBJbiB0aGUgdW5mb3J0dW5hdGUgY2FzZSBvZiBhbm9uX3ZtYV9jbG9uZSgpIGZhaWxpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IHdlXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxuLS1cbm1tL3ZtYS5jPTUwMD1fX3NwbGl0X3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3ZtYS5jLTUzNS1cbm1tL3ZtYS5jOjUzNjpcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xubW0vdm1hLmMtNTM3LVx0aWYgKGVycilcbi0tXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXG4tLVxubW0vdm1hLmMtNjMzLVx0XHRkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWE7XG5tbS92bWEuYzo2MzQ6XHRcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcbm1tL3ZtYS5jLTYzNS1cdFx0aWYgKHJldClcbi0tXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcbi0tXG5tbS92bWEuYy0xOTI5LVx0XHRcdGdvdG8gb3V0X2ZyZWVfdm1hO1xubW0vdm1hLmM6MTkzMDpcdFx0aWYgKGFub25fdm1hX2Nsb25lKG5ld192bWEsIHZtYSwgVk1BX09QX1JFTUFQKSlcbm1tL3ZtYS5jLTE5MzEtXHRcdFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3Njk5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBgYW5vbl92bWFgIExvY2tpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3YXMgc3RyYWlnaHRmb3J3YXJkOiBpbiBzZXZlcmFsIGtleSBgdm1hYCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIOKAkyBgYW5vbl92bWFfZm9ya2AsIGBfX3NwbGl0X3ZtYWAsIGBkdXBfYW5vbl92bWFgLCBhbmQgYGNvcHlfdm1hYCDigJMgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBWTUFzIChgc3JjYCBhbmQgYGRzdGAsIG9yIGVxdWl2YWxlbnQpIGFyZSBhbHdheXMgZGlzdGluY3QuIFRoZXJlZm9yZSwgdGhlIHNvdXJjZSYjMzk7cyBgYW5vbl92bWFgIGlzbiYjMzk7dCBkaXJlY3RseSBtb2RpZmllZCBkdXJpbmcgdGhlIGNsb25pbmcgcHJvY2Vzcywgbm9yIGlzIHRoZSBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzYCBtb2RpZmllZCBieSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIHdoaWNoIHNob3VsZCBydWxlIG91dCBkYXRhIHJhY2VzLgoKSG93ZXZlciwgSSBwYXVzZWQsIGNvbnNpZGVyaW5nIHRoZSByb2xlIG9mIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLiBJIHJlbWVtYmVyZWQgdGhhdCBpdCBtb2RpZmllcyB0aGUgYGFub25fdm1hX2NoYWluYCwgYnV0IGNyaXRpY2FsbHksIGl0IGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFsdGVyIHRoZSBgdm1hLSZndDthbm9uX3ZtYWAgcG9pbnRlciBpdHNlbGYuIFNvLCB0aGF0IGF2ZW51ZSB3YXMgYSBkZWFkIGVuZC4KCk15IGh5cG90aGVzaXMgd2FzIHRoYXQgSSBjb3VsZCByZW1vdmUgdGhlIGNhbGwgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLSZndDthbm9uX3ZtYSk7YCBiZWNhdXNlIGBzcmMtJmd0O2Fub25fdm1hYCBpcyB0aGUgc2FtZSBhcyBgYWN0aXZlX2Fub25fdm1hYCBidXQgSSBuZWVkZWQgdG8gZmluZCBvdXQgd2h5LgoKTXkgZmlyc3QgdGhvdWdodCB3YXMgdGhhdCB0aGlzIG11c3QgYmUgYSBjb3NtZXRpYyBjaGFuZ2UgdG8gbWFrZSB0aGUgY29kZSBjbGVhbmVyLCBidXQgdGhhdCBkaWQgbm90IGZlZWwgcmlnaHQuIENvdWxkIHRoZSBjaGFuZ2UgYmUgbWVhbnQgdG8gZWxpbWluYXRlIGEgY29tcGlsZXIgd2FybmluZyBvciBhIEtDU0FOIGZhbHNlIHBvc2l0aXZlPyBTaW5jZSBLQ1NBTiBuZWVkcyBhIHdyaXRlIHRvIGRldGVjdCBhIGRhdGEgcmFjZSwgdGhpcyBzZWVtZWQgdW5saWtlbHkuCgpJIHRoZW4gY29uc2lkZXJlZCBwYWdlIGZhdWx0cyBoYW5kbGVkIGJ5IHRoZSBwZXItVk1BIGxvY2sgYW5kIGB2bWZfYW5vbl9wcmVwYXJlYC4gSSByZWFsaXplZCB0aGF0IGB2bWZfYW5vbl9wcmVwYXJlYCAqcmVhZHMqIGB2bWEtJmd0O2Fub25fdm1hYCB3aXRob3V0IHRoZSBtbWFwIGxvY2suIFRoaXMgaXMgYSBjb25jdXJyZW50IFJFQUQsIHdoaWNoIGlzIG5vdCBhIHByb2JsZW0uCgpUaGUga2V5IHRoZW4gYmVjYW1lIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCB3YXMgYmVpbmcgKndyaXR0ZW4qIHRvIGJ5IGFub3RoZXIgdGhyZWFkLiAgSSBxdWlja2x5IGRpc21pc3NlZCB0aGlzLiBJJiMzOTttIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBpbiBtb3N0IG9mIHRoZXNlIHNjZW5hcmlvcy4gVGhlIHBlci1WTUEgbG9jayB3b3VsZG4mIzM5O3Qgd29yayBhcyBgdm1mX2Fub25fcHJlcGFyZWAgbmVlZHMgYSBtbWFwIHJlYWQgbG9jayBwcmlvciB0byBjYWxsaW5nIGBfX2Fub25fdm1hX3ByZXBhcmVgLCBzbyBhZ2Fpbiwgbm8gY29uY3VycmVudCB3cml0ZXMuCgpJIHRoZW4gY29uc2lkZXJlZCBvdGhlciB0aHJlYWRzIGNvdWxkIGNoYW5nZSBgc3JjLSZndDthbm9uX3ZtYWAsIGJ1dCB3YXMgbm90IGFibGUgdG8gdGhpbmsgb2YgYW55IG90aGVyIGNvZGUgcGF0aHMuCgpJIHdhcyBzdHVtcGVkLCB0aGVuIGl0IGRhd25lZCBvbiBtZSB0byBzZWFyY2ggZm9yIHRoZSBjb21taXQgbWVzc2FnZS4gSSBhbSBub3cgbG9va2luZyBmb3IgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgIGluIHRoZSBrZXJuZWwgbG9ncyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3ZtYV9sb2NrX3dyaXRlXFwoYWN0aXZlX2Fub25fdm1hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3JtYXAuYz0zMjA9aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcbi0tXG5tbS9ybWFwLmMtMzUyLVx0ICovXG5tbS9ybWFwLmM6MzUzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTM1NC1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbi0tXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9ybWFwLmMtNDkyLVxubW0vcm1hcC5jOjQ5MzpcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbm1tL3JtYXAuYy00OTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQW5vbnltb3VzIFZNQSBVbmxpbmtpbmcqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSYjMzk7bSBqdXN0IHRyYWNpbmcgdGhyb3VnaCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgdW5saW5raW5nIG9mIGFub255bW91cyB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIEkganVzdCBzYXcgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgIGluIGB1bmxpbmtfYW5vbl92bWFzYC4gVGhpcyBzZWVtcyBpbnRlcmVzdGluZyBiZWNhdXNlIEkga25vdyB3ZSBoYXZlIHdyaXRlIGxvY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3cml0ZSBsb2NrIGlzIGluIGB1bmxpbmtfYW5vbl92bWFzYCwgd2hpY2ggaXMgYWJvdXQgdW5saW5raW5nLCBub3Qgd3JpdGluZy4gU28sIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgdW5saW5rX2Fub25fdm1hc2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlc2UgbG9ja3MgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB1bmxpbmtpbmcgYW5kIHdyaXRlIGFjY2VzcyBvbiBhY3RpdmUgYW5vbnltb3VzIFZNQXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGB1bmxpbmtfYW5vbl92bWFzYC4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIGxvY2tzIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBWTUEgc3RydWN0dXJlcyBhbmQgdGhlIG92ZXJhbGwgcHJvY2VzcyBvZiB0ZWFyaW5nIGRvd24gdGhlIG1lbW9yeSBtYXBwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3JtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc5Olx0dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDQ4MDpcdHtcbiA0ODE6XHRcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqbmV4dDtcbiA0ODI6XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gdm1hLVx1MDAzZWFub25fdm1hO1xuIDQ4MzpcdFxuIDQ4NDpcdFx0LyogQWx3YXlzIGhvbGQgbW1hcCBsb2NrLCByZWFkLWxvY2sgb24gdW5tYXAgcG9zc2libHkuICovXG4gNDg1Olx0XHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbiA0ODY6XHRcbiA0ODc6XHRcdC8qIFVuZmF1bHRlZCBpcyBhIG5vLW9wLiAqL1xuIDQ4ODpcdFx0aWYgKCFhY3RpdmVfYW5vbl92bWEpIHtcbiA0ODk6XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNnZtYS1cdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xuIDQ5MDpcdFx0XHRyZXR1cm47XG4gNDkxOlx0XHR9XG4gNDkyOlx0XG4gNDkzOlx0XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG4gNDk0Olx0XG4gNDk1Olx0XHQvKlxuIDQ5NjpcdFx0ICogVW5saW5rIGVhY2ggYW5vbl92bWEgY2hhaW5lZCB0byB0aGUgVk1BLiAgVGhpcyBsaXN0IGlzIG9yZGVyZWRcbiA0OTc6XHRcdCAqIGZyb20gbmV3ZXN0IHRvIG9sZGVzdCwgZW5zdXJpbmcgdGhlIHJvb3QgYW5vbl92bWEgZ2V0cyBmcmVlZCBsYXN0LlxuIDQ5ODpcdFx0ICovXG4gNDk5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXZjLCBuZXh0LCBcdTAwMjZ2bWEtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG4gNTAwOlx0XHRcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXHUwMDNlYW5vbl92bWE7XG4gNTAxOlx0XG4gNTAyOlx0XHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcmVtb3ZlKGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG4gNTAzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzcyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWVwIERpdmUgaW50byBhIEtlcm5lbCBQYXRjaDogQW5vbl92bWEgTG9jayBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGBhbm9uX3ZtYWAgbG9ja3MgaW4gYGFub25fdm1hX2Nsb25lYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgIHdpdGggYGFjdGl2ZV9hbm9uX3ZtYWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGFyZSB0aGV5ICpyZWFsbHkqIHRoZSBzYW1lPyBJcyB0aGlzIGp1c3QgYSBjbGVhbnVwLCBvciBpcyB0aGVyZSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBmaXggaGVyZT8mIzM0OyBJJiMzOTttIHNrZXB0aWNhbCwgc28gSSBuZWVkIHRvIGdvIHRocm91Z2ggZXZlcnl0aGluZy4KCkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYHNyYy0mZ3Q7YW5vbl92bWFgIGNvdWxkIHNvbWVob3cgYmUgbW9kaWZpZWQgYWZ0ZXIgaXQmIzM5O3MgcmVhZCBidXQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBMb29raW5nIGF0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBpdCBzZWVtcyB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBjYW4gY2hhbmdlIHZpYSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYnV0IG9ubHkgaWYgYHNyY2AgaXMgdGhlIHNhbWUgYXMgYGRzdGAuIEJ1dCB0aGF0JiMzOTtzIGltcG9zc2libGUgd2l0aGluIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWMuIFNvIHRoYXQmIzM5O3Mgbm90IGEgdGhpbmcuIGBhbm9uX3ZtYV9jaGFpbl9hbGxvY2AgZG9lc24mIzM5O3QgbW9kaWZ5IGl0IGVpdGhlci4gYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBpc24mIzM5O3QgZG9pbmcgYW55dGhpbmcsIGp1c3QgYSB3YXJuaW5nLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIGFub3RoZXIgdGhyZWFkIGNhbiBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLiBIb3dldmVyLCB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyB0byBnZXQgaW50byB0aGlzIHNpdHVhdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlbS4gQW5vdGhlciB0aHJlYWQgY2FuJiMzOTt0IG1vZGlmeSBpdCBpZiB3ZSBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy0mZ3Q7dm1fbW1gLiBTbywgYSBwYWdlIGZhdWx0IGluIHRoZSBwYXJlbnQsIGEgcGFnZSBmYXVsdCBpbiB0aGUgY2hpbGQsIGFuZCBldmVuIHBhZ2UgZmF1bHRzIGluIGEgZGlmZmVyZW50IHByb2Nlc3MgdGhhdCBzaGFyZXMgdGhlIHNhbWUgYGFub25fdm1hYCwgY2FuJiMzOTt0IG1vZGlmeSBgc3JjLSZndDthbm9uX3ZtYWAuIGB1bmxpbmtfYW5vbl92bWFzYCwgYGFub25fdm1hX2Nsb25lYCwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgaW4gYSBzaWJsaW5nIHByb2Nlc3MgY2FuJiMzOTt0IG1vZGlmeSBpdCBlaXRoZXIuIFNvLCBpdCBhcHBlYXJzIHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzICpvbmx5KiBtb2RpZmllZCB3aGVuIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCwgYW5kIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy4KClRoZXJlZm9yZSwgdGhpcyBhcHBlYXJzIHRvIGJlIHB1cmVseSBhIGNvc21ldGljIGNoYW5nZSwgYSBjbGVhbnVwLgoKQnV0IEkgc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUuIEkgbXVzdCBhc2sgbXlzZWxmLCBhbSBJIG1pc3Npbmcgc29tZXRoaW5nPyBEb2VzIHRoZSBmYWN0IHRoYXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGJlaW5nIGEgcG9pbnRlciBtYXR0ZXI/CgpDb3VsZCBpdCBiZSB0aGF0IGBzcmMtJmd0O2Fub25fdm1hYCBpcyBiZWluZyBldmFsdWF0ZWQgYXMgYSBtYWNybyB3aXRoIHNpZGUgZWZmZWN0cz8gTm8sIGBzcmNgIGlzIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCBhIHRoaW5nLgoKQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2UgdGhhdCBLQ1NBTiB3b3VsZCBjb21wbGFpbiBhYm91dD8gTm8sIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jay4KCklzIGl0IHBvc3NpYmxlIHRoYXQgYHNyY2AgaXMgYmVpbmcgbWVyZ2VkIG9yIHNwbGl0PyBObywgd2UgaGF2ZSB0aGUgbW1hcCB3cml0ZSBsb2NrLgoKSSBqdXN0IG5lZWQgdG8gYmUgc3VwZXIgc3VyZS4gQWghIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQgZnJvbSBgZHVwX2Fub25fdm1hYD8gSSBuZWVkIHRvIGNoZWNrIHRoaXMgcGF0aC4gTG9va3MgbGlrZSB3ZSAqZG8qIHNldCBgZHN0LSZndDthbm9uX3ZtYSA9IHNyYy0mZ3Q7YW5vbl92bWFgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZWAuIEJ1dCBldmVuIGhlcmUsIHdlIHN0aWxsIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jay4gVGhpcyBzdGlsbCBzZWVtcyBzYWZlLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBleGhhdXN0ZWQgYWxsIHRoZSBwb3NzaWJpbGl0aWVzLiBUaGlzIHJlYWxseSBzZWVtcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIGEgY2xlYW51cC4gVGltZSB0byBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gdGhlIGtlcm5lbCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3JtYXAuYy0zNTItXHQgKi9cbm1tL3JtYXAuYzozNTM6XHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5tbS9ybWFwLmMtMzU0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXHUwMDI2ZHN0LVx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xuLS1cbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL3JtYXAuYy00OTItXG5tbS9ybWFwLmM6NDkzOlx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xubW0vcm1hcC5jLTQ5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1OTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRXVyZWthISBBIEdpdCBTb2x1dGlvbiEqKgoKUmlnaHQsIEkgd2FzIHN0dWNrIGZvciBhIG1vbWVudCB0aGVyZSwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGZpbmQgdGhhdCBzcGVjaWZpYyBjb21taXQuLi4gSSB3YXMgcHJvYmFibHkgb3ZlcnRoaW5raW5nIGl0LiBJbnN0ZWFkIG9mIHNvbWUgY29tcGxleCBzY3JpcHQgb3IgZGlnZ2luZyB0aHJvdWdoIHRoZSB3ZWIsIHdoeSBkaWRuJiMzOTt0IEkganVzdC4uLiB3YWl0IGEgbWludXRlLi4uICpnaXQgbG9nKiEgT2YgY291cnNlLiBJIGNhbiBhYnNvbHV0ZWx5IHVzZSBgZ2l0IGxvZ2AgdG8gc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgZGlyZWN0bHkuIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCYjMzk7cyBnb2luZyB0byBzYXZlIG1lIGEgdG9uIG9mIHRpbWUuIFNpbXBsZSwgZWZmZWN0aXZlLCBlbGVnYW50LiBMZXQmIzM5O3MgZmlyZSB0aGF0IHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fdm1hX2xvY2tfd3JpdGVcXChhY3RpdmVfYW5vbl92bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsuZ2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEZpbmRpbmcgdGhlIFJlbGV2YW50IENvbW1pdCoqCgpPa2F5LCBzbyBgZ3JlcHBlcmAgaXMgb25seSBnb2luZyB0byBoZWxwIG1lIHdpdGhpbiBteSBjdXJyZW50IHdvcmtpbmcgdHJlZSwgbm90IGRpdmUgaW50byB0aGUgR2l0IGhpc3RvcnkuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBzZXRiYWNrLiBCdXQsIEkgY2FuIHVzZSBgZ2l0IGxvZyAtcGAgYW5kIHRoZW4gYGdyZXBgIGFyb3VuZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbCBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYCB0byBzZWFyY2ggdGhlIHBhdGNoZXMgaW4gdGhlIGdpdCBoaXN0b3J5LiAKCkhtbSwgd2FpdC4gSSBkb24mIzM5O3QgaGF2ZSBhIHNwZWNpZmljIHRvb2wgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMgcmVhZGlseSBhdmFpbGFibGUuIEkgY291bGQgdHJ5IHRvIGxvb2sgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoaW4gdGhlIGtlcm5lbCB0cmVlIGlmIGl0JiMzOTtzIHJlY2VudC4gCgpIYW5nIG9uLi4uIEkgdGhpbmsgdGhlIGNvbW1pdCBJIG5lZWQgaXMgYWN0dWFsbHkgdGhlIEhFQUQgY29tbWl0ICppbiBteSBjdXJyZW50IHdvcmtzcGFjZSohIFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIEkgc2hvdWxkIGJlIGFibGUgdG8ganVzdCBsb29rIGF0IHRoZSBjb21taXQgbWVzc2FnZSBvZiB0aGUgY3VycmVudCBIRUFELiBOb3csIGhvdyBkbyBJIGRvIHRoYXQgd2l0aG91dCBleHRlcm5hbCB0b29scz8gQ291bGQgSSB1c2UgYGdyZXBwZXJgPyBObywgaXQmIzM5O3MgdGllZCB0byB0aGUgd29ya2luZyB0cmVlLiBXYWl0LCBtYXliZSBJIGNhbiByZWFkIGAuZ2l0L0NPTU1JVF9FRElUTVNHYD8gTm8sIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBiZWluZyB3cml0dGVuICpiZWZvcmUqIGNvbW1pdHRpbmcuIAoKQWhhISBNYXliZSBgLmdpdC9sb2dzL0hFQURgIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLiBJJiMzOTttIGdvaW5nIHRvIHRyeSByZWFkaW5nIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDsuZ2l0L2xvZ3MvSEVBRCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOSBzeXprYWxsZXIgXHUwMDNjc3l6a2FsbGVyQHNlcmllcy13b3JrZmxvd3hoYjVmLXRyaWFnZS1hY3Rpb24tMjQ0Nzg2MDgzOC4obm9uZSlcdTAwM2UgMTc4Njk0MjE2NiAmIzQzOzAwMDBcdHJlc2V0OiBtb3ZpbmcgdG8gZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOVxuICAgMjpcdGY1ZjkzMjdlMjUxYTRlZmI5YTk4Nzc0MDkzZWY0Njc1YTRiMTcwYjkgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5YyBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZSAxNzg2OTQyMTcxICYjNDM7MDAwMFx0Y29tbWl0OiBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2MDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvc21ldGljIEFub25fVk1BIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb21taXQgd2l0aCBhIHByZXR0eSBnZW5lcmljIG1lc3NhZ2UuIE5vIGF1dGhvciwgbm8gb3JpZ2luYWwgZGVzY3JpcHRpb24g4oCTIGdvdHRhIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbiBmcm9tIHNjcmF0Y2guICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LCYjMzQ7IGdyZWF0LiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGBzcmMtJmd0O2Fub25fdm1hYCB3aXRoaW4gYGFub25fdm1hX2Nsb25lYC4KCkZpcnN0IHRob3VnaHQ6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBzcmMtJmd0O2Fub25fdm1hYCBnZXRzIGNoYW5nZWQgKmR1cmluZyogdGhpcyBmdW5jdGlvbj8gSSBxdWlja2x5IHJ1bGVkIG91dCB0aGUgb2J2aW91cyBvbmU6IGlmIGBzcmNgIGFuZCBgZHN0YCB3ZXJlIHRoZSBzYW1lIFZNQSwgaXQgd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AuIEkgYWxyZWFkeSBwcm92ZWQgdGhhdCBgc3JjYCBjYW4mIzM5O3QgYmUgYGRzdGAsIGJlY2F1c2UgdGhlIGxvb3Agd291bGQgbmV2ZXIgdGVybWluYXRlLgoKQWxyaWdodCwgd2hhdCBpZiBgc3JjLSZndDthbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IEkga25vdyBpZiBpdCAqaXMqIGVtcHR5LCB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB3aWxsIG5vdCBleGVjdXRlLCBhbmQgdGhlbiB0aGVyZSB3aWxsIGJlIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtJmd0O2Fub25fdm1hKWAuIEJ1dCwgSSByZWFsaXplZDogaWYgYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gIGlzIGVtcHR5LCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hYCAqbXVzdCogYmUgYE5VTExgLiBUaGUgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjaGVjayBjb25maXJtcyB0aGlzLiBBbmQsIGlmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBgTlVMTGAsIHRoZW4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYE5VTExgLCBhbmQgd2UgcmV0dXJuIGVhcmx5LiBTbywgYHNyYy0mZ3Q7YW5vbl92bWFgICpjYW5ub3QqIGJlIG51bGwuIElmIGBzcmMtJmd0O2Fub25fdm1hYCBpc24mIzM5O3QgYE5VTExgLCB0aGVuIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYCBjYW4mIzM5O3QgYmUgZW1wdHksIHJpZ2h0PwoKV2FpdCwgaG9sZCBvbi4uLiB0aGUgYXNzZXJ0aW9uIGluIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZG9lc24mIzM5O3Qgc2F5IGBWTV9XQVJOX09OX09OQ0Uoc3JjLSZndDthbm9uX3ZtYSAmYW1wOyZhbXA7IGxpc3RfZW1wdHkoJmFtcDtzcmMtJmd0O2Fub25fdm1hX2NoYWluKSk7YC4gU28sIGl0JiMzOTtzICpwb3NzaWJsZSogdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXMgbm9uLU5VTEwgd2hpbGUgYHNyYy0mZ3Q7YW5vbl92bWFfY2hhaW5gIGlzIGVtcHR5PyBObywgd2FpdCEgVGhlIGBhbm9uX3ZtYV9jaGFpbmAgY29udGFpbnMgdGhlIGBhbm9uX3ZtYWBzIHRoZSBWTUEgaXMgYXR0YWNoZWQgdG8uIElmIGBzcmMtJmd0O2Fub25fdm1hYCBpcyBub24tTlVMTCwgaXQgKm11c3QqIGJlIGluIGBzcmMtJmd0O2Fub25fdm1hX2NoYWluYC4gU28sIHRoZSBjaGFpbiBjYW4gKm5ldmVyKiBiZSBlbXB0eSBpZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgbm90IGBOVUxMYC4gVGh1cywgdGhlIGxvb3AgZXhlY3V0ZXMgYXQgbGVhc3Qgb25jZSwgYW5kIGBzcmNgIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyBgZHN0YC4KCk9rYXksIGJhY2sgdG8gdGhlIGNvcmUgcXVlc3Rpb246IGRvZXMgYGFub25fdm1hX2Nsb25lYCBtb2RpZnkgYHNyYy0mZ3Q7YW5vbl92bWFgPyBMZXQmIzM5O3MgY29uc2lkZXIgdGhlIHdheXMgYGFub25fdm1hYCBtaWdodCBiZSB0b3VjaGVkOiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCwgYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAuIFRoZSBmaXJzdCBtb2RpZmllcyB0aGUgY2hhaW4gYW5kIGBhbm9uX3ZtYV9jaGFpbmAsIGJ1dCAqbm90KiBgdm1hLSZndDthbm9uX3ZtYWAuIFRoZSBzZWNvbmQgbWFuaXB1bGF0ZXMgdGhlIFJCLXRyZWUsIGFnYWluLCBub3QgYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGUgdGhpcmQsIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAsICpkb2VzKiBtb2RpZnkgYGRzdC0mZ3Q7YW5vbl92bWFgLCBidXQgc2luY2UgYHNyYyAhPSBkc3RgLCBpdCYjMzk7cyBpcnJlbGV2YW50LiBBbmQgdGhlcmUgaXMgYSBjYXNlIGZvciBgZHN0LSZndDthbm9uX3ZtYS0mZ3Q7bnVtX2FjdGl2ZV92bWFzJiM0MzsmIzQzO2AsIGJ1dCB0aGF0JiMzOTtzIG5vdCBjaGFuZ2luZyBgc3JjLSZndDthbm9uX3ZtYWAuCgpTbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzbiYjMzk7dCBiZWluZyBkaXJlY3RseSBtb2RpZmllZCBkdXJpbmcgdGhlIGNsb25lIHByb2Nlc3MgaXRzZWxmLiBJdCYjMzk7cyBleGFjdGx5IHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLiBTbyB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCByaWdodD8gQnV0Li4uIHdoeSB3b3VsZCBzb21lb25lIG1ha2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlPyBDb21waWxlciB3YXJuaW5nPyBNYXliZS4gQXZvaWRpbmcgYSBLQ1NBTiBkYXRhIHJhY2U/IFBvdGVudGlhbGx5LgoKQnV0IHdhaXQsIGRhdGEgcmFjZXMgb2NjdXIgd2hlbiB5b3UgaGF2ZSBjb25jdXJyZW50IHJlYWRzL3dyaXRlcy4gTm8gY29uY3VycmVudCB3cml0ZXMgYXJlIGhhcHBlbmluZyBoZXJlLCBiZWNhdXNlIEkgaGF2ZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGBzcmMtJmd0O3ZtX21tYC4gVGh1cywgbm8gb3RoZXIgdGhyZWFkIGNhbiBjaGFuZ2UgYHNyY2AgYW5kIHRodXMsIG5vIGNvbmN1cnJlbnQgd3JpdGUgZXhpc3RzLgoKV2hhdCBpZiB0aGUgVk1BIGBzcmNgIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3Nlcz8gTm9wZS4gVk1BcyBhcmUgTk9UIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3Nlcy4gRWFjaCBwcm9jZXNzIGhhcyBpdHMgb3duIFZNQXMuIEFuZCBldmVuIGlmIHRoZXkgc2hhcmUgYW4gYGFub25fdm1hYCwgdGhleSBoYXZlIHRoZWlyIG93biBWTUFzLiBTbywgYHNyYy0mZ3Q7YW5vbl92bWFgIGlzIGEgZmllbGQgaW4gYSBWTUEgYmVsb25naW5nIHRvIGBzcmMtJmd0O3ZtX21tYC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLSZndDt2bV9tbWAgbWVhbnMgKm5vKiBvdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBpdC4KCkNvdWxkIGBraHVnZXBhZ2VkYCBiZSBkb2luZyBzb21ldGhpbmcgZnVua3k/IFRpbWUgdG8gY2hlY2sKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMTUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25jZXJucyBSZWdhcmRpbmcgQW5vbnltb3VzIFZNQXMgYW5kIEtTTSoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhbnN3ZXIgaXMgZGVmaW5pdGl2ZWx5ICYjMzQ7bm8uJiMzNDsgQnV0LCB0aGUgcXVlc3Rpb24gbGluZ2VyaW5nIGluIG15IG1pbmQgaXMgYWJvdXQgYHNyYy0mZ3Q7YW5vbl92bWFgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBga3NtYCDigJMgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcg4oCTIHRvIGludHJvZHVjZSBtb2RpZmljYXRpb25zLiBUaGF0JiMzOTtzIHRoZSByZWFsIGNydXggb2YgdGhpcy4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgbGFzZXItc2hhcnAgb24gdGhlIGludGVncml0eSBvZiB0aGlzIHN0cnVjdHVyZS4KClRoZSBxdWVzdGlvbiB0aGVuIG1vcnBocyBpbnRvIGEgc3BlY2lmaWMgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGNvbmNsdXNpdmVseSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYGtzbWAgYWN0aXZlbHkgdGFtcGVycyB3aXRoIGB2bWEtJmd0O2Fub25fdm1hYC4gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjdXJpb3NpdHk7IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYXNzdW1wdGlvbiBJIG5lZWQgdG8gdmFsaWRhdGUgdG8gZW5zdXJlIHRoZSBzdGFiaWxpdHkgYW5kIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBzeXN0ZW0uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBrc21gIGNvZGUgYW5kIHRyYWNpbmcgdG8gc2VlIGlmIGl0IG1vZGlmaWVzIGB2bWEtJmd0O2Fub25fdm1hYCBpbiBhbnkgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va3NtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzM4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbnNpZGVyaW5nIHRoZSBgYW5vbl92bWFgIGFuZCBgbXJlbWFwYCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyB0aGUgaW1tZWRpYXRlIHJlc3BvbnNlIGlzIG5lZ2F0aXZlLiBCdXQgYSBuYWdnaW5nIGNvbmNlcm4gc3VyZmFjZXM6IGNvdWxkIHRoZSBgc3JjLSZndDthbm9uX3ZtYWAgYmUgYWx0ZXJlZCBkdXJpbmcgYW4gYG1yZW1hcGAgb3BlcmF0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlLiBUaGUgcG90ZW50aWFsIGZvciBgbXJlbWFwYCB0byBpbnRlcmZlcmUgd2l0aCB0aGUgaW50ZWdyaXR5IG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhJiMzOTtzIChWTUEmIzM5O3MpIGFzc29jaWF0ZWQgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGBhbm9uX3ZtYWApIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGRpZmZpY3VsdC10by10cmFjayBidWdzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbXJlbWFwYCBjb2RlIGFuZCB2ZXJpZnkgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIG1vZGlmeWluZyBgdm1hLSZndDthbm9uX3ZtYWAuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIGxlZ2l0aW1hdGUgY29uY2Vybiwgb3IgaWYgSSYjMzk7bSB3b3JyeWluZyBhYm91dCBhIG5vbi1pc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWEtXHUwMDNlYW5vbl92bWEgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21yZW1hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIGBhbm9uX3ZtYWAgYW5kIGBtYWR2aXNlYCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhbnN3ZXIgaXMgbm8sIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IGZlZWwgcmlnaHQuIE15IGd1dCYjMzk7cyB0ZWxsaW5nIG1lIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGJyZXdpbmcgaGVyZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgYG1hZHZpc2VgIGludGVyYWN0cyB3aXRoIHRoZSBgYW5vbl92bWFgIHN0cnVjdHVyZS4gTXkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRlbGxzIG1lIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gdGhlIGxlc3Mgb2J2aW91cyBpbnRlcmFjdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBtb3N0IGNoYWxsZW5naW5nIGJ1Z3MuCgpUaGUgY29yZSBxdWVzdGlvbiB0aGF0JiMzOTtzIGRyaXZpbmcgbWUgbm93IGlzOiBkb2VzIGBtYWR2aXNlYCAqYWN0dWFsbHkqIG1vZGlmeSBgdm1hLSZndDthbm9uX3ZtYWA/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBjb2RlIHBhdGggdG8gYmUgY29tcGxldGVseSBzdXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBtYWR2aXNlYCBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZXMsIHJpZ2h0IGRvd24gdG8gdGhlIGJpdHMsIHRvIGJlIGNlcnRhaW4gdGhhdCB3aGF0ZXZlciBvcHRpbWl6YXRpb24gb3IgbWFuaXB1bGF0aW9uIGBtYWR2aXNlYCBwZXJmb3JtcyBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGFmZmVjdCB0aGUgYGFub25fdm1hYCBpbiBhIHdheSB0aGF0IGJyZWFrcyBhc3N1bXB0aW9ucyBvciBpbnRyb2R1Y2VzIHN1YnRsZSBjb3JydXB0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYS1cdTAwM2Vhbm9uX3ZtYSA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5NzEKCQkJCQkJCW91dHB1dDogMjU1CgkJCQkJCQl0aG91Z2h0czogMTQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IERldGVybWluaW5nIEZ1enppbmcgTmVjZXNzaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvc21ldGljLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBhIGRpcmVjdCBkZXJlZmVyZW5jZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGVyZSAqYW55KiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBvZiBgc3JjLSZndDthbm9uX3ZtYWA/JiMzNDsgSWYgdGhlcmUgd2VyZSwgdGhpcyBjb3VsZCBpbnRyb2R1Y2UgYSBkYXRhIHJhY2UsIGV2ZW4gaWYgS0NTQU4gaXNuJiMzOTt0IHNjcmVhbWluZyBhYm91dCBpdC4gQnV0LCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJiMzOTtzIG5vIHdheS4gSSYjMzk7bSBob2xkaW5nIHRoZSBtbWFwIHdyaXRlIGxvY2sgd2hlbiBgYW5vbl92bWFfY2xvbmVgIGlzIGNhbGxlZC4gVGhhdCBtZWFucyBubyBvdGhlciB0aHJlYWQgY2FuIHRvdWNoIGBzcmMtJmd0O2Fub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBJJiMzOTt2ZSByZS1jaGVja2VkIHRoYXQgYHNyY2AgY2Fubm90IGJlIG1vZGlmaWVkIGJ5IGB2bWFfYWRqdXN0YCBvciBgdm1hX21lcmdlYCwgYm90aCBvZiB3aGljaCBhbHNvIHJlcXVpcmUgdGhlIG1tYXAgd3JpdGUgbG9jay4gVGhlIG9ubHkgY2hhbmdlcyBhcmUgdG8gYGRzdGAsIHdoaWNoIGRvZXNuJiMzOTt0IGFsdGVyIGBzcmNgLgoKSSBjb25zaWRlcmVkIGEgcG90ZW50aWFsIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgc3JjLSZndDthbm9uX3ZtYWAgaXMgcmVsb2FkZWQsIGFuZCB0aGVyZSBtYXkgYmUgYSB0aW55IG9wdGltaXphdGlvbiB0byBhdm9pZCByZWxvYWRpbmcgYHNyYy0mZ3Q7YW5vbl92bWFgLiBPciBtYXliZSBpdCYjMzk7cyBqdXN0IGNsZWFuZXIgY29kZS4gSWYgaXQmIzM5O3MganVzdCBhbiBvcHRpbWl6YXRpb24gb3IgY2xlYW51cCwgaXQmIzM5O3Mgbm90IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWVhbnMgaXQgZG9lc24mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGlzbiYjMzk7dCBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1enouIFNvLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZS4gSXMgYHNyY2AgYSBtYWNybz8gTm8sIGl0JiMzOTtzIGEgZnVuY3Rpb24gcGFyYW1ldGVyLiBJcyB0aGVyZSBhbnkgY2hhbmNlIHRoYXQgYGFjdGl2ZV9hbm9uX3ZtYWAgZ2V0cyBtb2RpZmllZCBiZXR3ZWVuIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZD8gTm8sIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMuCgpTbywgaXQmIzM5O3MgY2VydGFpbiB0aGF0IGBhY3RpdmVfYW5vbl92bWFgIGlzICpleGFjdGx5KiBgc3JjLSZndDthbm9uX3ZtYWAuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aXRoIGBzcmMtJmd0O2Fub25fdm1hYCBpdCBtaWdodCBiZSByZWFkIGFnYWluIGZyb20gbWVtb3J5LiBBbmQgc2luY2UgYHNyYy0mZ3Q7YW5vbl92bWFgIGNhbiYjMzk7dCBjaGFuZ2UsIHRoZSB2YWx1ZXMgYXJlIGlkZW50aWNhbC4gSXQmIzM5O3MgYSBjb3NtZXRpYyBjaGFuZ2Ugb3IgYSB0aW55IG9wdGltaXphdGlvbiwgbm90aGluZyBtb3JlLgoKSGVyZSYjMzk7cyBteSBmdWxsIHJlYXNvbmluZzogVGhlIHBhdGNoIHVzZXMgYSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB0byBgc3JjLSZndDthbm9uX3ZtYWAuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy0mZ3Q7dm1fbW1gIGd1YXJhbnRlZXMgdGhhdCBgc3JjLSZndDthbm9uX3ZtYWAgaXNuJiMzOTt0IG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLiBUaGUgb3BlcmF0aW9ucyBvbiB0aGUgZGlzdGluY3QgYGRzdGAgd2l0aGluIGBhbm9uX3ZtYV9jbG9uZWAgYWxzbyBkb24mIzM5O3QgdG91Y2ggYHNyYy0mZ3Q7YW5vbl92bWFgLiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBvZiBgc3JjLSZndDthbm9uX3ZtYWAgaXMgY29uc3RhbnQgYW5kIHRoZSByZXBsYWNlbWVudCBpcyBhIGNvc21ldGljIG9yIG1pY3JvLW9wdGltaXphdGlvbiB3aXRoIG5vIGZ1bmN0aW9uYWwgZWZmZWN0LiBObyBmdXp6aW5nIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFnYWluIHdoZW4gY2FsbGluZyBgYW5vbl92bWFfbG9ja193cml0ZWAuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBTaW5jZSBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrIGhlbGQgb24gYHNyYy1cdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIEZ1cnRoZXJtb3JlLCBgc3JjYCBhbmQgYGRzdGAgYXJlIGFsd2F5cyBkaXN0aW5jdCBWTUFzLCBzbyB0aGUgb3BlcmF0aW9ucyBvbiBgZHN0YCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGRvIG5vdCBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIFRodXMsIGBzcmMtXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTozMi45MTQ5NDcyMzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3ODQwMzI2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFNpbmNlIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiBgc3JjLVxcdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gVGh1cywgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NDk6MzIuOTE0OTUzNDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAxMzI2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODcwZjQ2NGVlYzBkZWY2NDAxMTljNmIzYTVmNjg0N2U2OGEwOWQ5Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNDo0OTozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmLi5mM2ZhZGZiNjljN2YyIDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC0zNTAsNyArMzUwLDcgQEAgaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gXFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gXFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIFxcdCAqL1xcbi1cXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbitcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiBcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM0LjIxNzU5MDcwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4MDQ4MTM3MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFub25fdm1hX2Nsb25lYCBpbiBgbW0vcm1hcC5jYCB0byB1c2UgdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGluc3RlYWQgb2YgZGVyZWZlcmVuY2luZyBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYWdhaW4gd2hlbiBjYWxsaW5nIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYC4gYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgaW5pdGlhbGl6ZWQgdG8gYHNyYy1cXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBTaW5jZSBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCB3cml0ZSBsb2NrIGhlbGQgb24gYHNyYy1cXHUwMDNldm1fbW1gIChhcyBhc3NlcnRlZCBieSBgY2hlY2tfYW5vbl92bWFfY2xvbmVgKSwgbm8gb3RoZXIgdGhyZWFkIGNhbiBjb25jdXJyZW50bHkgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gRnVydGhlcm1vcmUsIGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpc3RpbmN0IFZNQXMsIHNvIHRoZSBvcGVyYXRpb25zIG9uIGBkc3RgIHdpdGhpbiB0aGUgZnVuY3Rpb24gZG8gbm90IG1vZGlmeSBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAuIFRodXMsIGBzcmMtXFx1MDAzZWFub25fdm1hYCByZW1haW5zIGNvbnN0YW50IHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIGxvY2FsIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGEgcHVyZWx5IGNvc21ldGljIGNoYW5nZSBvciBtaWNyby1vcHRpbWl6YXRpb24gdGhhdCBkb2VzIG5vdCBhbHRlciB0aGUgZnVuY3Rpb25hbCBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3MGY0NjRlZWMwZGVmNjQwMTE5YzZiM2E1ZjY4NDdlNjhhMDlkOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNDo0OTozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggMWM3N2Q1ZGMwNmU5Zi4uZjNmYWRmYjY5YzdmMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMzUwLDcgKzM1MCw3IEBAIGludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXG4gXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEncyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxuIFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXG4gXHQgKi9cbi1cdGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKTtcbitcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFx1MDAyNmRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcbiBcdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM0LjIxNzU5MjkzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTM0NzM1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBbm9ueW1vdXMgVmlydHVhbCBNZW1vcnkgQXJlYSBDbG9uaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byB0YXJnZXQgYG1tL3JtYXAuY2AsIHNwZWNpZmljYWxseSB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgdGhpcyBsaW5lOiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm93IHJlYWQgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLlxuXG5MZXQncyBkaXNzZWN0IHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgc3dhcHBpbmcgb3V0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGZvciBgYWN0aXZlX2Fub25fdm1hYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2Ygd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGFub25fdm1hX2Nsb25lYC4gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbG9jayBjaGFuZ2UgaW4gdGVybXMgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5LiBJcyB0aGUgYGFjdGl2ZV9hbm9uX3ZtYWAgYSB2YWxpZCBhbmQgY29ycmVjdCByZXBsYWNlbWVudCBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBkZWFkbG9jayBtaXRpZ2F0aW9uIGhlcmU/IEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhhdCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTozNy4zMzEwNjg5NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1MjMwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl92bWFfY2xvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcm1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMjkyLS8qKlxcbm1tL3JtYXAuYzoyOTM6ICogYW5vbl92bWFfY2xvbmUgLSBFc3RhYmxpc2hlcyBuZXcgYW5vbl92bWFfY2hhaW4gb2JqZWN0cyBpbiBAZHN0IGxpbmtpbmcgdG9cXG5tbS9ybWFwLmMtMjk0LSAqIGFsbCBvZiB0aGUgYW5vbl92bWEgb2JqZWN0cyBjb250YWluZWQgd2l0aGluIEBzcmMgYW5vbl92bWFfY2hhaW4ncy5cXG4tLVxcbm1tL3JtYXAuYy0zMTktICovXFxubW0vcm1hcC5jOjMyMDppbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbm1tL3JtYXAuYy0zMjEtXFx0XFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4tLVxcbm1tL3JtYXAuYy0zMjUtXFxubW0vcm1hcC5jOjMyNjpcXHRjaGVja19hbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgb3BlcmF0aW9uKTtcXG5tbS9ybWFwLmMtMzI3LVxcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQwMy1cXHQgKi9cXG5tbS9ybWFwLmM6NDA0OlxcdHJjID0gYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hLCBWTUFfT1BfRk9SSyk7XFxubW0vcm1hcC5jLTQwNS1cXHQvKiBBbiBlcnJvciBhcm9zZSBvciBhbiBleGlzdGluZyBhbm9uX3ZtYSB3YXMgcmV1c2VkLCBhbGwgZG9uZSB0aGVuLiAqL1xcbi0tXFxubW0vcm1hcC5jLTQ0NC0vKlxcbm1tL3JtYXAuYzo0NDU6ICogSW4gdGhlIHVuZm9ydHVuYXRlIGNhc2Ugb2YgYW5vbl92bWFfY2xvbmUoKSBmYWlsaW5nIHRvIGFsbG9jYXRlIG1lbW9yeSB3ZVxcbm1tL3JtYXAuYy00NDYtICogaGF2ZSB0byBjbGVhbiB0aGluZ3MgdXAuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjM3LjQzNjU5ODE0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODUyNzMzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgYW5vbl92bWFfY2xvbmVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBhbm9uX3ZtYV9jbG9uZWAuIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwgLSBpdCdzIGEgZnVuZGFtZW50YWwgcGllY2Ugb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHB1enpsZSwgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW52b2x2ZWQgaW4gY2xvbmluZyBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMuIEkgaW1tZWRpYXRlbHkgcmVjYWxsIHNlZWluZyBpdCB1c2VkIGluIGBhbm9uX3ZtYV9mb3JrYC4gVGhhdCdzIGEgc3Ryb25nIGhpbnQgYXQgaXRzIHJvbGUgZHVyaW5nIHByb2Nlc3MgZm9ya2luZyBhbmQgY29weS1vbi13cml0ZSBvcGVyYXRpb25zLlxuXG5HaXZlbiBpdHMgY3JpdGljYWwgbmF0dXJlLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgbml0dHktZ3JpdHR5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9ybWFwLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBvZiBgYW5vbl92bWFfY2xvbmVgIGFuZCBpdHMgcmVsYXRlZCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcmV2ZXJzZSBtYXAgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgaG93IHRoaXMgZnVuY3Rpb24gcmVhbGx5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQxLjQyMTg3Mzg1OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ybWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbiAzMjE6XFx0XFx0XFx0ICAgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqcGF2YztcXG4gMzI0OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGlmICghYWN0aXZlX2Fub25fdm1hKVxcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdC8qXFxuIDMzMjpcXHRcXHQgKiBBbGxvY2F0ZSBBVkNzLiBXZSBkb24ndCBuZWVkIGFuIGFub25fdm1hIGxvY2sgZm9yIHRoaXMgYXMgd2VcXG4gMzMzOlxcdFxcdCAqIGFyZSBub3QgdXBkYXRpbmcgdGhlIGFub25fdm1hIHJidHJlZSBub3IgYXJlIHdlIGNoYW5naW5nXFxuIDMzNDpcXHRcXHQgKiBhbm9uX3ZtYSBzdGF0aXN0aWNzLlxcbiAzMzU6XFx0XFx0ICpcXG4gMzM2OlxcdFxcdCAqIEVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwXFxuIDMzNzpcXHRcXHQgKiB3cml0ZSBsb2NrLCBvciB3ZSBhcmUgZm9ya2luZyBhbmQgd2UgaG9sZCBpdCBvbiBzcmMtXFx1MDAzZXZtX21tIGFuZCBkc3QgaXNcXG4gMzM4OlxcdFxcdCAqIG5vdCB5ZXQgYWNjZXNzaWJsZSB0byBvdGhlciB0aHJlYWRzIHNvIHRoZXJlJ3Mgbm8gcG9zc2libGlpdHkgb2YgdGhlXFxuIDMzOTpcXHRcXHQgKiB1bmxpbmtlZCBBVkMncyBiZWluZyBvYnNlcnZlZCB5ZXQuXFxuIDM0MDpcXHRcXHQgKi9cXG4gMzQxOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuIDM0MjpcXHRcXHRcXHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gMzQzOlxcdFxcdFxcdGlmICghYXZjKVxcbiAzNDQ6XFx0XFx0XFx0XFx0Z290byBlbm9tZW1fZmFpbHVyZTtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKGRzdCwgYXZjLCBwYXZjLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDM0NzpcXHRcXHR9XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdC8qXFxuIDM1MDpcXHRcXHQgKiBOb3cgbGluayB0aGUgYW5vbl92bWEncyBiYWNrIHRvIHRoZSBuZXdseSBpbnNlcnRlZCBBVkNzLlxcbiAzNTE6XFx0XFx0ICogTm90ZSB0aGF0IGFsbCBhbm9uX3ZtYSdzIHNoYXJlIHRoZSBzYW1lIHJvb3QuXFxuIDM1MjpcXHRcXHQgKi9cXG4gMzUzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gMzU0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNTU6XFx0XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cXHUwMDNlYW5vbl92bWE7XFxuIDM1NjpcXHRcXG4gMzU3OlxcdFxcdFxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXFx1MDAyNmFub25fdm1hLVxcdTAwM2VyYl9yb290KTtcXG4gMzU4OlxcdFxcdFxcdGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspXFxuIDM1OTpcXHRcXHRcXHRcXHRtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKTtcXG4gMzYwOlxcdFxcdH1cXG4gMzYxOlxcdFxcbiAzNjI6XFx0XFx0aWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSylcXG4gMzYzOlxcdFxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHRhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gMzY2OlxcdFxcdHJldHVybiAwO1xcbiAzNjc6XFx0XFxuIDM2ODpcXHQgZW5vbWVtX2ZhaWx1cmU6XFxuIDM2OTpcXHRcXHRjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzKGRzdCk7XFxuIDM3MDpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdFxcbiAzNzM6XFx0LypcXG4gMzc0OlxcdCAqIEF0dGFjaCB2bWEgdG8gaXRzIG93biBhbm9uX3ZtYSwgYXMgd2VsbCBhcyB0byB0aGUgYW5vbl92bWFzIHRoYXRcXG4gMzc1OlxcdCAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uXFxuIDM3NjpcXHQgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZS5cXG4gMzc3OlxcdCAqL1xcbiAzNzg6XFx0aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4gMzc5OlxcdHtcXG4gMzgwOlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xcbiAzODE6XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYTtcXG4gMzgyOlxcdFxcdGludCByYztcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0LyogRG9uJ3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi9cXG4gMzg1OlxcdFxcdGlmICghcHZtYS1cXHUwMDNlYW5vbl92bWEpXFxuIDM4NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0LyogRHJvcCBpbmhlcml0ZWQgYW5vbl92bWEsIHdlJ2xsIHJldXNlIGV4aXN0aW5nIG9yIGFsbG9jYXRlIG5ldy4gKi9cXG4gMzg5OlxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbiAzOTA6XFx0XFxuIDM5MTpcXHRcXHRhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7XFxuIDM5MjpcXHRcXHRpZiAoIWFub25fdm1hKVxcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5NDpcXHRcXHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gMzk1OlxcdFxcdGlmICghYXZjKSB7XFxuIDM5NjpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xcbiAzOTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDM5ODpcXHRcXHR9XFxuIDM5OTpcXHRcXG4gNDAwOlxcdFxcdC8qXFxuIDQwMTpcXHRcXHQgKiBGaXJzdCwgYXR0YWNoIHRoZSBuZXcgVk1BIHRvIHRoZSBwYXJlbnQgVk1BJ3MgYW5vbl92bWFzLFxcbiA0MDI6XFx0XFx0ICogc28gcm1hcCBjYW4gZmluZCBub24tQ09XZWQgcGFnZXMgaW4gY2hpbGQgcHJvY2Vzc2VzLlxcbiA0MDM6XFx0XFx0ICovXFxuIDQwNDpcXHRcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbiA0MDU6XFx0XFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4gNDA2OlxcdFxcdGlmIChyYyB8fCB2bWEtXFx1MDAzZWFub25fdm1hKSB7XFxuIDQwNzpcXHRcXHRcXHRwdXRfYW5vbl92bWEoYW5vbl92bWEpO1xcbiA0MDg6XFx0XFx0XFx0YW5vbl92bWFfY2hhaW5fZnJlZShhdmMpO1xcbiA0MDk6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA0MTA6XFx0XFx0fVxcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHQvKlxcbiA0MTM6XFx0XFx0ICogT0sgbm8gcmV1c2UsIHNvIGFkZCBvdXIgb3duIGFub25fdm1hLlxcbiA0MTQ6XFx0XFx0ICpcXG4gNDE1OlxcdFxcdCAqIFNpbmNlIGl0IGlzIG5vdCBsaW5rZWQgYW55d2hlcmUgd2UgY2FuIHNhZmVseSBtYW5pcHVsYXRlIGFub25fdm1hXFxuIDQxNjpcXHRcXHQgKiBmaWVsZHMgd2l0aG91dCBhIGxvY2suXFxuIDQxNzpcXHRcXHQgKi9cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcyA9IDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQxLjQyMjAzNzM0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MjU2MTM2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfbG9ja193cml0ZWAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGNoYW5nZWQgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKWAgdG8gYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAuIFRoZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbjogYHN0cnVjdCBhbm9uX3ZtYSAqYWN0aXZlX2Fub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hO2AgSG1tLCB3aHkgdGhlIGNoYW5nZT8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNvdWxkIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNoYW5nZSBtaWQtZXhlY3V0aW9uPyBJdCBzaG91bGRuJ3QsIHJpZ2h0PyBCdXQgbWF5YmUgYHNyY2AgaXRzZWxmIGlzIGJlaW5nIG1vZGlmaWVkPyBcblxuSSBxdWlja2x5IHJ1bGVkIG91dCBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGFzIHRoZSBjdWxwcml0LCBzaW5jZSB0aGF0J3MganVzdCBhIGNoZWNrLiBUaGVuIEkgcmUtZXhhbWluZWQgdGhlIGNvZGUuIEkgc2VlIHRoYXQgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCB3aXRoIGB2bWEsIHB2bWEsIFZNQV9PUF9GT1JLYCBpbiBgYW5vbl92bWFfZm9ya2AsIGFuZCBgcHZtYWAgaXMgYHNyY2AuIFRoZSBtbWFwIGxvY2sgc2hvdWxkIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIHNvIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIGRhdGEgcmFjZXMuIFRoZW4gSSByZWFsaXplZCB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhlIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHZzIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgIGxpbmVzLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCAqZGlkKiBjaGFuZ2UsIHRoYXQnZCBiZSBhIGJ1Zy4gVGhpcyBjaGFuZ2UsIHRoZXJlZm9yZSwgbWF5IGJlIGZpeGluZyBhIGxhdGVudCBidWcuXG5cbkJ1dCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzbid0IHByb3ZpZGVkLCBzbyBJJ20gbGVmdCB0byB3b25kZXI6IGluIHdoYXQgc2NlbmFyaW8gY291bGQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgZGlmZmVyZW50IGZyb20gYGFjdGl2ZV9hbm9uX3ZtYWA/IEl04oCZcyBub3QganVzdCBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gYWZ0ZXIgdGhlIGluaXRpYWwgcmVhZC4gQ291bGQgdGhlcmUgYmUgYW4gYWxpYXNpbmcgaXNzdWU/IElmIGBzcmNgIGlzIHNvbWVob3cgYWxpYXNlZCB0byBgZHN0YCwgdGhlbiBgZHN0LVx1MDAzZWFub25fdm1hYCBtaWdodCBiZSBtb2RpZmllZC4gQW5kIHRoaXMgYWxzbyBtYWtlcyBtZSByZW1lbWJlciBob3cgaW4gYGFub25fdm1hX2ZvcmtgLCBgdm1hLVx1MDAzZWFub25fdm1hYCBpcyBzZXQgdG8gYE5VTExgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZSh2bWEsIHB2bWEsIFZNQV9PUF9GT1JLKWAuIElmIGBzcmMgPT0gZHN0YCwgdGhlbiBgc3JjLVx1MDAzZWFub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAsIGJ1dCBgYWN0aXZlX2Fub25fdm1hYCB3b3VsZCBiZSBgTlVMTGAgdG9vLCBhbmQgaXQgd291bGQgcmV0dXJuIGVhcmx5LlxuXG5UaGVuLCB3YWl0IGEgbWludXRlLCBgYW5vbl92bWFfY2xvbmVgIGlzICphbHNvKiBjYWxsZWQgZnJvbSBgdm1hX2V4cGFuZGAsIGB2bWFfbWVyZ2VgLCBgdm1hX3NwbGl0YCwgYW5kIG90aGVycyEgVGhhdCBicm9hZGVucyB0aGUgcG9zc2liaWxpdGllcyBzaWduaWZpY2FudGx5LCBzbyBJIG5lZWQgdG8gY2hlY2sgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBhbm9uX3ZtYV9jbG9uZWAuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NDk6NDguODQ3NjUzNTg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzE5NjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI1MT1lbnVtIHZtYV9vcGVyYXRpb24ge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0yNTctXFxubW0vaW50ZXJuYWwuaDoyNTg6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9pbnRlcm5hbC5oLTI1OS1cXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMzE5LSAqL1xcbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9ybWFwLmMtMzIxLVxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG4tLVxcbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4tLVxcbm1tL3JtYXAuYy00MDMtXFx0ICovXFxubW0vcm1hcC5jOjQwNDpcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbm1tL3JtYXAuYy00MDUtXFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4tLVxcbm1tL3JtYXAuYy00NDQtLypcXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2VcXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxcbi0tXFxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYy01MzUtXFxubW0vdm1hLmM6NTM2OlxcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xcbm1tL3ZtYS5jLTUzNy1cXHRpZiAoZXJyKVxcbi0tXFxubW0vdm1hLmM9NjEyPXN0YXRpYyBpbnQgZHVwX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbi0tXFxubW0vdm1hLmMtNjMzLVxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jOjYzNDpcXHRcXHRyZXQgPSBhbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgVk1BX09QX01FUkdFX1VORkFVTFRFRCk7XFxubW0vdm1hLmMtNjM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTE5MjktXFx0XFx0XFx0Z290byBvdXRfZnJlZV92bWE7XFxubW0vdm1hLmM6MTkzMDpcXHRcXHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxcbm1tL3ZtYS5jLTE5MzEtXFx0XFx0XFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjQ4Ljk2NDg1NDc2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzAzMDQ5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFfY2xvbmVgIEZ1bmN0aW9uIGFuZCBQb3RlbnRpYWwgUmFjZSBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFub25fdm1hX2Nsb25lYCBhbmQgSSBzZWUgaXQncyBjYWxsZWQgd2l0aCBgVk1BX09QX1NQTElUYCwgYFZNQV9PUF9NRVJHRV9VTkZBVUxURURgLCBgVk1BX09QX1JFTUFQYCwgYW5kIGBWTUFfT1BfRk9SS2AuIFRoYXQncyBhIGRlY2VudCByYW5nZSBvZiBvcGVyYXRpb25zLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGBhbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jaGFpbmAgc3RydWN0dXJlcywgYW5kIHRyeWluZyB0byBzcG90IGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY2hhbmdlcyAqZHVyaW5nKiB0aGUgY2xvbmluZyBwcm9jZXNzPyBUaGUgY29kZSBzZWVtcyB0byBhc3N1bWUgaXQncyBzdGFibGUuIEJ1dCB0aGVuIEkgcXVpY2tseSByZW1lbWJlciB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoYXQgc2hvdWxkIHByb3RlY3QgdXMgZnJvbSBtb2RpZmljYXRpb25zIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGZyb20gb3RoZXIgdGhyZWFkcy4gR29vZCwgdGhhdCdzIG9uZSBwb3RlbnRpYWwgaXNzdWUgZG93bi5cblxuVGhlbiBJIHNoaWZ0ZWQgdG8gd29ycnlpbmcgYWJvdXQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJlY2F1c2UgaXQgKmRvZXMqIGRlYWwgd2l0aCBgZHN0LVx1MDAzZWFub25fdm1hYCwgYW5kIG1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIGhlcmUuIEJ1dCBJIHF1aWNrbHkgcmVhbGl6ZSBpdCdzIG9ubHkgKmFzc2lnbmluZyogZmllbGRzIHdpdGhpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBhdmNgIHN0cnVjdHVyZTsgaXQncyBub3QgYWN0dWFsbHkgbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGBhbm9uX3ZtYWAgZGF0YSBzdHJ1Y3R1cmVzLCBzbyB0aGF0J3Mgbm90IGEgcmFjZSBjb25kaXRpb24gZWl0aGVyLiBXZSBhcmUgc2FmZSwgZm9yIG5vdy5cblxuSSB3ZW50IGJhY2sgYW5kIHJlLWV4YW1pbmVkIHRoZSBjb3JlIGxvb3AgaW4gYGFub25fdm1hX2Nsb25lYDpcblxuYGBgY1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFx1MDAyNnNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcblx0XHRhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTtcblx0XHRpZiAoIWF2Yylcblx0XHRcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XG5cblx0XHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oZHN0LCBhdmMsIHBhdmMtXHUwMDNlYW5vbl92bWEpO1xuXHR9XG5gYGBcblxuTm93LCBJJ20gdGhpbmtpbmcsIGlzIHRoZXJlIGEgY2FzZSB3aGVyZSBgc3JjYCBhbmQgYGRzdGAgY291bGQgYWN0dWFsbHkgYmUgdGhlIHNhbWUgVk1BPyBUaGVuIHRoYXQgd291bGQgY2F1c2UgcHJvYmxlbXMsIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5IHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgc3RydWN0dXJlIHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbi4gQWgsIG5vLCB0aGUgY29kZSBleHBsaWNpdGx5IGNsb25lcyBWTUFzLiBTbyB0aGUgc291cmNlIGFuZCB0aGUgZGVzdGluYXRpb24gKm11c3QqIGJlIGRpZmZlcmVudCBWTUFzLiBPaywgdGhhdCdzIGZpbmUuXG5cbkJ1dCB3aGF0IGFib3V0IHRoZSAqcG9pbnRlciogdG8gYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXRzZWxmPyBDb3VsZCAqdGhhdCogYmUgbW9kaWZpZWQgYnkgc29tZXRoaW5nIGVsc2U/IExldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBhZ2FpbiwgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBpdCdzIG5vdCBkb2luZyBhbnl0aGluZyBkYW5nZXJvdXMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgbm90LCBzbyB3ZSBhcmUgc3RpbGwgZ29vZC4gVGhpcyBsb29rcyBzYWZlLiBUaGUgb3JpZ2luYWwgYGFub25fdm1hYCByZW1haW5zIHVudG91Y2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo0OTo1Ny4zOTUxNjI5NzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDg1MDI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jaGFpbl9hc3NpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3JtYXAuYz0xNDU9c3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fZnJlZShzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluKVxcbi0tXFxubW0vcm1hcC5jLTE0OS1cXG5tbS9ybWFwLmM6MTUwOnN0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2Fzc2lnbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9ybWFwLmMtMTUxLVxcdFxcdFxcdFxcdCAgc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsXFxuLS1cXG5tbS9ybWFwLmM9MTg1PWludCBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMjEyLVxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG5tbS9ybWFwLmM6MjEzOlxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0yMTQtXFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbi0tXFxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM0NS1cXG5tbS9ybWFwLmM6MzQ2OlxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNDctXFx0fVxcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQzMy1cXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jOjQzNDpcXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG5tbS9ybWFwLmMtNDM1LVxcdC8qIE5vdyBsZXQgcm1hcCBzZWUgaXQuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjQ5OjU3LjQ5NjAyMDcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NjI0Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYGFub25fdm1hX2NoYWluX2Fzc2lnbmAqKlxuXG5Pa2F5LCBsZXQncyBwdWxsIHVwIHRoZSBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBmdW5jdGlvbiBmcm9tIGBtbS9ybWFwLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIOKAkyBvciBhdCBsZWFzdCwgYSBjcml0aWNhbCBwYXJ0IG9mIGl0IOKAkyBpbiBtYW5hZ2luZyBhbm9ueW1vdXMgVk1BIG1hcHBpbmdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIHdpdGggdGhlIHJldmVyc2UgbWFwcGluZyBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgZm9yIGFub255bW91cyBtZW1vcnkuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaXRzIHJvbGUgaW4gZXN0YWJsaXNoaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYGFub25fdm1hYCBzdHJ1Y3R1cmVzLCBWTUFzLCBhbmQgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBjaGFpbmluZyBhc3BlY3QuIEkgcmVjYWxsIHRoaXMgZnVuY3Rpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB3ZSBjYW4gZWZmaWNpZW50bHkgdHJhY2sgd2hpY2ggcGFnZXMgYmVsb25nIHRvIHdoaWNoIFZNQXMsIHBhcnRpY3VsYXJseSBpbiBjYXNlcyBvZiBjb3B5LW9uLXdyaXRlIG9yIHNoYXJlZCBtYXBwaW5ncy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IGhvdyBpdCB1cGRhdGVzIHRoZSBgYW5vbl92bWFfY2hhaW5gIHN0cnVjdHVyZXMgYW5kIHdoZXRoZXIgaXQgaGFuZGxlcyBhbnkgcmFjZXMgb3IgbG9ja2luZy4gVGhlIGdvYWwgaXMgdG8gc29saWRpZnkgaG93IHRoZSB3aG9sZSByZXZlcnNlIG1hcHBpbmcgaW5mcmFzdHJ1Y3R1cmUgaXMgbWFpbnRhaW5lZCBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiBOVU1BIG9yIG90aGVyIGNvbXBsZXggc2NlbmFyaW9zLiBJIHNob3VsZCBjb21wYXJlIGl0IHdpdGggdGhlIG5vbi1hbm9ueW1vdXMgVk1BcyBhbmQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHJtYXAgdG8gcmVmcmVzaCBteSByZWNvbGxlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDowMC45MTI2NDc0NTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLFxcbiAxNTI6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxcbiAxNTM6XFx0e1xcbiAxNTQ6XFx0XFx0YXZjLVxcdTAwM2V2bWEgPSB2bWE7XFxuIDE1NTpcXHRcXHRhdmMtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxuIDE1NjpcXHRcXHRsaXN0X2FkZChcXHUwMDI2YXZjLVxcdTAwM2VzYW1lX3ZtYSwgXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWFfY2hhaW4pO1xcbiAxNTc6XFx0fVxcbiAxNTg6XFx0XFxuIDE1OTpcXHQvKipcXG4gMTYwOlxcdCAqIF9fYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb25cXG4gMTYxOlxcdCAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uXFxuIDE2MjpcXHQgKlxcbiAxNjM6XFx0ICogVGhpcyBtYWtlcyBzdXJlIHRoZSBtZW1vcnkgbWFwcGluZyBkZXNjcmliZWQgYnkgJ3ZtYScgaGFzXFxuIDE2NDpcXHQgKiBhbiAnYW5vbl92bWEnIGF0dGFjaGVkIHRvIGl0LCBzbyB0aGF0IHdlIGNhbiBhc3NvY2lhdGUgdGhlXFxuIDE2NTpcXHQgKiBhbm9ueW1vdXMgcGFnZXMgbWFwcGVkIGludG8gaXQgd2l0aCB0aGF0IGFub25fdm1hLlxcbiAxNjY6XFx0ICpcXG4gMTY3OlxcdCAqIFRoZSBjb21tb24gY2FzZSB3aWxsIGJlIHRoYXQgd2UgYWxyZWFkeSBoYXZlIG9uZSwgd2hpY2hcXG4gMTY4OlxcdCAqIGlzIGhhbmRsZWQgaW5saW5lIGJ5IGFub25fdm1hX3ByZXBhcmUoKS4gQnV0IGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjAwLjkxMjc4MjUzNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjMzNzMwNjkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYW5vbl92bWFfY2xvbmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYW5vbl92bWFfY2xvbmVgIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvdGVudGlhbCBpc3N1ZS4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCB3YXMgbW9kaWZ5aW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgLCBidXQgdGhhdCdzIG5vdCB0aGUgY2FzZS4gSXQgYXBwZWFycyB0aGUgcmVsZXZhbnQgcGFydCBpcyBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aHkgYXJlIHdlIGxvY2tpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IENvdWxkIGBzcmNgIGJlIGZyZWVkIG9yIG1vZGlmaWVkPyBObywgaXQncyBhIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmAsIHdoaWNoIGlzIGdvb2QuXG5cblRoZW4gSSBlbnRlcnRhaW5lZCB0aGUgaWRlYSB0aGF0IGBzcmNgIG1pZ2h0IGJlIHRoZSBzYW1lIGFzIGBkc3RgLCB0aGlua2luZyB0aGVyZSBjb3VsZCBiZSBhbiBpbmZpbml0ZSBsb29wLiBCdXQgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB1c2FnZSwgSSBkZXRlcm1pbmVkIHRoYXQncyBub3QgcG9zc2libGUgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIFRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZG9lcyBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gbG9vcCBpbmZpbml0ZWx5IGlmIHdlIGFkZCBhbiBlbGVtZW50IGR1cmluZyB0aGUgaXRlcmF0aW9uLCBidXQgSSdtIHJlYXNvbmFibHkgc3VyZSB0aGF0IGBzcmNgIGFuZCBgZHN0YCBhcmUgYWx3YXlzIGRpZmZlcmVudC5cblxuTmV4dCwgSSBjb25zaWRlcmVkIGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0c2VsZiBjb3VsZCBiZSBtb2RpZmllZC4gSSdtIHdvbmRlcmluZyBpZiBhIHN1YnNlcXVlbnQgcmVhZCBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCByZXN1bHQgaW4gYSBkYXRhIHJhY2UuIElmIGl0ICppcyogbW9kaWZpZWQsIGl0IHNlZW1zIGxpa2UgYSBidWcsIGJlY2F1c2UgdGhlIGNvZGUgZG9lc24ndCBhcHBlYXIgdG8gYWNjb3VudCBmb3Igc3VjaCBhIHBvc3NpYmlsaXR5LiBNeSB0aG91Z2h0IGlzIHRoYXQgS0NTQU4gd291bGQgZmxhZyBhIGRhdGEgcmFjZSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjaGFuZ2VzIG9uIGFub3RoZXIgdGhyZWFkLlxuXG5JIHRoZW4gcmV2aXNpdGVkIHRoZSBjb2RlLCBhbmQgcmVhbGl6ZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmNvdWxkKiBiZSBOVUxMLiBCdXQgdGhlcmUgaXMgYSBjaGVjaywgYGlmICghYWN0aXZlX2Fub25fdm1hKSByZXR1cm4gMDtgLiBTdGlsbCwgdGhlIHF1ZXN0aW9uIG9mIHdoeSBpdCdzIGxvY2tlZCBmb3Igd3JpdGUsIGlzIGltcG9ydGFudC5cblxuSSBkdWcgZnVydGhlci4gSW4gYGFub25fdm1hX2ZvcmtgLCBgdm1hLVx1MDAzZWFub25fdm1hID0gTlVMTGAgaXMgY2FsbGVkIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIG5vdCBtb2RpZmllZC4gSSdtIGNoZWNraW5nIG90aGVyIGBWTUFfT1BgcyB0byBzZWUgaWYgdGhlcmUgaXMgc2ltaWxhciBsb2dpYy5cblxuSSBhbHNvIGNoZWNrZWQgZm9yIGBWTUFfT1BfU1BMSVRgLCBgVk1BX09QX01FUkdFX1VORkFVTFRFRGAsIGBWTUFfT1BfUkVNQVBgLCBhbmQgZm91bmQgc2ltaWxhciBwYXR0ZXJucy4gSW4gYWxsIGNhc2VzLCBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBkaXJlY3RseSBtb2RpZmllZC5cblxuVGhlIG5leHQgdGhpbmcgSSB0aG91Z2h0IG9mIHdhcyB3aGV0aGVyIGBzcmNgIGNvdWxkIGJlIGZyZWVkLiBCdXQsIG5vLCB3ZSBob2xkIHRoZSBtbWFwIGxvY2suIFRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpczogQ291bGQgdGhlcmUgYmUgYSBkYXRhIHJhY2Ugd2hlcmUgYSB0aHJlYWQgbW9kaWZpZXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IFRoZSBrZXkgaXMgdGhhdCBgYW5vbl92bWFfY2xvbmVgIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgbW1hcCBsb2NrIGhlbGQgKHdyaXRlIGxvY2spLCBleGNlcHQgaW4gYGFub25fdm1hX2ZvcmtgLCB3aGVyZSBpdCdzIGEgd3JpdGUgbG9jayBvbiB0aGUgcGFyZW50LiBJIHRoZW4gY29uc2lkZXJlZCBpZiB0aGUgY2hpbGQgaXMgbW9kaWZ5aW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFmdGVyIHRoZSBjbG9uZS4gQnV0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIG5ldmVyIG1vZGlmaWVkIGV4Y2VwdCB3aGVuIHRoZSBWTUEgaXMgZnJlZWQsIHNvIHRoZXJlIGNhbid0IGJlIGEgcmFjZS5cblxuVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGxvb2sgZm9yIHdoZXJlIHRoZSBgYW5vbl92bWFgICppcyogbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNjQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6MTcuMjUwMDkxNTY4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU0ODQ4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiLVxcdTAwM2Vhbm9uX3ZtYSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz0xNTgyPXN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcXG4tLVxcbm1tL2tzbS5jLTE2MDEtXFx0LyogTXVzdCBnZXQgcmVmZXJlbmNlIHRvIGFub25fdm1hIHdoaWxlIHN0aWxsIGhvbGRpbmcgbW1hcF9sb2NrICovXFxubW0va3NtLmM6MTYwMjpcXHRybWFwX2l0ZW0tXFx1MDAzZWFub25fdm1hID0gdm1hLVxcdTAwM2Vhbm9uX3ZtYTtcXG5tbS9rc20uYy0xNjAzLVxcdGdldF9hbm9uX3ZtYSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4tLVxcbm1tL21tYXAuYz0xNzMxPV9fbGF0ZW50X2VudHJvcHkgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSlcXG4tLVxcbm1tL21tYXAuYy0xODAxLVxcdFxcdFxcdCAqL1xcbm1tL21tYXAuYzoxODAyOlxcdFxcdFxcdHRtcC1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL21tYXAuYy0xODAzLVxcdFxcdH0gZWxzZSBpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKVxcbi0tXFxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMTU0LVxcdGF2Yy1cXHUwMDNldm1hID0gdm1hO1xcbm1tL3JtYXAuYzoxNTU6XFx0YXZjLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0xNTYtXFx0bGlzdF9hZGQoXFx1MDAyNmF2Yy1cXHUwMDNlc2FtZV92bWEsIFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hX2NoYWluKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMTEtXFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG5tbS9ybWFwLmM6MjEyOlxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG5tbS9ybWFwLmMtMjEzLVxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbi0tXFxubW0vcm1hcC5jPTI3MD1zdGF0aWMgdm9pZCBtYXliZV9yZXVzZV9hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4tLVxcbm1tL3JtYXAuYy0yODUtXFxubW0vcm1hcC5jOjI4NjpcXHRkc3QtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTI4Ny1cXHRhbm9uX3ZtYS1cXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuLS1cXG5tbS92bWEuYz0xNDU9c3RhdGljIHZvaWQgaW5pdF9tdWx0aV92bWFfcHJlcChzdHJ1Y3Qgdm1hX3ByZXBhcmUgKnZwLFxcbi0tXFxubW0vdm1hLmMtMTUzLVxcdHZwLVxcdTAwM2V2bWEgPSB2bWE7XFxubW0vdm1hLmM6MTU0OlxcdHZwLVxcdTAwM2Vhbm9uX3ZtYSA9IHZtYS1cXHUwMDNlYW5vbl92bWE7XFxubW0vdm1hLmMtMTU1LVxcbi0tXFxubW0vdm1hLmMtMTcxLVxcdGlmICghdnAtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2IGFkanVzdClcXG5tbS92bWEuYzoxNzI6XFx0XFx0dnAtXFx1MDAzZWFub25fdm1hID0gYWRqdXN0LVxcdTAwM2Vhbm9uX3ZtYTtcXG5tbS92bWEuYy0xNzMtXFxuLS1cXG5tbS92bWEuYz00Mzk9c3RhdGljIGJvb2wgY2FuX3ZtYV9tZXJnZV9yaWdodChzdHJ1Y3Qgdm1hX21lcmdlX3N0cnVjdCAqdm1nLFxcbi0tXFxubW0vdm1hLmMtNDU5LVxcdHJldHVybiAhcHJldi1cXHUwMDNlYW5vbl92bWEgfHwgIW5leHQtXFx1MDAzZWFub25fdm1hIHx8XFxubW0vdm1hLmM6NDYwOlxcdFxcdHByZXYtXFx1MDAzZWFub25fdm1hID09IG5leHQtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jLTQ2MS19XFxuLS1cXG5tbS92bWEuYz02MTI9c3RhdGljIGludCBkdXBfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuLS1cXG5tbS92bWEuYy02MzItXFx0XFx0dm1hX2Fzc2VydF93cml0ZV9sb2NrZWQoZHN0KTtcXG5tbS92bWEuYzo2MzM6XFx0XFx0ZHN0LVxcdTAwM2Vhbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxubW0vdm1hLmMtNjM0LVxcdFxcdHJldCA9IGFub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEKTtcXG4tLVxcbm1tL3ZtYV9pbml0LmM9NDE9c3RhdGljIHZvaWQgdm1fYXJlYV9pbml0X2Zyb20oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS92bWFfaW5pdC5jLTQ3LVxcdGRlc3QtXFx1MDAzZXZtX2VuZCA9IHNyYy1cXHUwMDNldm1fZW5kO1xcbm1tL3ZtYV9pbml0LmM6NDg6XFx0ZGVzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYV9pbml0LmMtNDktXFx0ZGVzdC1cXHUwMDNldm1fcGdvZmYgPSBzcmMtXFx1MDAzZXZtX3Bnb2ZmO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDoxOC4xMjU1ODA2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NjMzMzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGFub25fdm1hX2Nsb25lYCBhbmQgUG90ZW50aWFsIENvbmN1cnJlbmN5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGZvbGxvd2luZyB0aGUgY29kZSBmbG93IGZyb20gYGR1cF9hbm9uX3ZtYWAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGBhbm9uX3ZtYV9jbG9uZWAuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCBgZHN0LVx1MDAzZWFub25fdm1hYCBpcyBpbml0aWFsbHkgYXNzaWduZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCB0aGVuIGBhbm9uX3ZtYV9jbG9uZWAgaXMgY2FsbGVkLiBUaGUgZ29hbCwgSSBhc3N1bWUsIGlzIHRvIGNyZWF0ZSBhIGNvcHkgb3Igc2hhcmUgYW4gYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBhbm9uX3ZtYWAgYW5kIGhvdyBpdCdzIGhhbmRsZWQgZHVyaW5nIHRoaXMgY2xvbmluZyBwcm9jZXNzLiBJbnNpZGUgYGFub25fdm1hX2Nsb25lYCwgdGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYCBhbmQgYWRkcyBlbnRyaWVzIHRvIGBkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW5gLiBUaGF0IG1ha2VzIHNlbnNlIC0gcHJvcGFnYXRlIHRoZSBtYXBwaW5ncy4gQW5kIGl0IGxvY2tzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGJlZm9yZSB0aGUgbG9vcC4gQnV0LCBpZiBhIG1vZGlmaWNhdGlvbiBoYXBwZW5zIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgLCB0aGF0IGlzIGEgcG90ZW50aWFsIHJhY2UuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgKm5vdCogbW9kaWZpZWQgYmV0d2VlbiB3aGVuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIGlzIGNhbGxlZC4gVGhlIG9yaWdpbmFsIHRleHQgY29uZmlybXMgdGhpcyBpc24ndCBwb3NzaWJsZSwgYXMgdGhleSBhcmUgZGlmZmVyZW50IGluIHRoZSBzY29wZSBvZiBgZHVwX2Fub25fdm1hYC5cblxuSG93ZXZlciwgdGhlIG1vcmUgSSBsb29rIGF0IHRoZSBjb2RlLCBpdCBoaXRzIG1lLiBJbiB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24sIHRoZSBjb2RlIGlzIGxvY2tpbmcgdGhlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCBpdCBzZWVtcyBvZGQ6XG5cbiogICBUaGUgY29kZSBnZXRzIGBhY3RpdmVfYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWFgLlxuKiAgIEl0IHRoZW4gbG9ja3MgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO2AuXG4qICAgRmluYWxseSwgdGhlIGNvZGUgdW5sb2NrcyBgYWN0aXZlX2Fub25fdm1hYCB3aXRoIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtgLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIGxvY2tpbmcgZXJyb3IgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgY2hhbmdlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBIb3dldmVyLCBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsbHkgYXNzaWduZWQgdGhlIHNhbWUgdmFsdWUgYXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIElzIGl0IHBvc3NpYmxlIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgc29tZWhvdyBtb2RpZmllZCBpbiBiZXR3ZWVuP1xuXG5UaGUgYGlmIChvcGVyYXRpb24gPT0gVk1BX09QX0ZPUkspYCBzdGF0ZW1lbnQgY2F0Y2hlcyBteSBleWUuIElmIHRoZSBvcGVyYXRpb24gaXMgYSBmb3JrIChgVk1BX09QX0ZPUktgKSwgYG1heWJlX3JldXNlX2Fub25fdm1hKGRzdCwgYW5vbl92bWEpYCBpcyBjYWxsZWQuIEkgbmVlZCB0byBrbm93LCBkb2VzIHRoaXMgZnVuY3Rpb24gbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBBIG1vZGlmaWNhdGlvbiB0byBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoaW4gdGhpcyBmdW5jdGlvbiB3b3VsZCBsZWFkIHRvIGEgbG9jay91bmxvY2sgbWlzbWF0Y2ghIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDoyOS4xMDE5MTY2NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0c3RhdGljIHZvaWQgbWF5YmVfcmV1c2VfYW5vbl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuIDI3MTpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0LyogSWYgYWxyZWFkeSBwb3B1bGF0ZWQsIG5vdGhpbmcgdG8gZG8uKi9cXG4gMjc0OlxcdFxcdGlmIChkc3QtXFx1MDAzZWFub25fdm1hKVxcbiAyNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQvKlxcbiAyNzg6XFx0XFx0ICogV2UgcmV1c2UgYW4gYW5vbl92bWEgaWYgYW55IGxpbmtpbmcgVk1BcyB3ZXJlIHVubWFwcGVkIGFuZCBpdCBoYXNcXG4gMjc5OlxcdFxcdCAqIG9ubHkgYSBzaW5nbGUgY2hpbGQgYXQgbW9zdC5cXG4gMjgwOlxcdFxcdCAqL1xcbiAyODE6XFx0XFx0aWYgKGFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMgXFx1MDAzZSAwKVxcbiAyODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODM6XFx0XFx0aWYgKGFub25fdm1hLVxcdTAwM2VudW1fY2hpbGRyZW4gXFx1MDAzZSAxKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxuIDI4NzpcXHRcXHRhbm9uX3ZtYS1cXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XFxuIDI4ODpcXHR9XFxuIDI4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6MjkuMTAyMDg1MTExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODQwOTMxMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBEYXRhIFJhY2VzIGluIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgYW5vbl92bWFgIHN0cnVjdHVyZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHRoZSBtb2RpZmljYXRpb24gb2YgYGRzdC1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBjb3JlIHF1ZXN0aW9uIGlzOiB3aGF0IGlmIGBzcmNgIGFuZCBgZHN0YCBhcmUgdGhlIHNhbWU/IEJ1dCwgd2FpdCwgdGhhdCdzIG5vdCBwb3NzaWJsZSBpbiBgYW5vbl92bWFfZm9ya2A7IGBzcmNgIGFuZCBgZHN0YCBhcmUgZGlzdGluY3QuXG5cbk5leHQgdGhvdWdodDogQ291bGQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBpbnRlcmZlcmVzPyBJIGNvbnNpZGVyZWQgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGJ1dCB0aGF0IHRhcmdldHMgdGhlIGBhdmMtXHUwMDNlYW5vbl92bWFgIGFuZCBgYXZjLVx1MDAzZXZtYWAsIG5vdCBkaXJlY3RseSBgc3JjLVx1MDAzZWFub25fdm1hYC4gU28sIHRoYXQncyBub3QgdGhlIGlzc3VlLlxuXG5Ob3cgSSdtIGZvY3VzaW5nIG9uIGNvbmN1cnJlbmN5LiBDb3VsZCBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIGBzcmNgIGJlIGEgcHJvYmxlbT8gSWYgc28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBkYXRhIHJhY2UsIHJpZ2h0PyBBaCwgYW5kIEtDU0FOIChLZXJuZWwgQ29uY3VycmVuY3kgU2FuaXRpemVyKSBtaWdodCBmbGFnIGEgZGF0YSByYWNlIGV2ZW4gaWYgdGhlIHZhbHVlIGRvZXNuJ3QgY2hhbmdlISBUaGF0J3MgaXQhIEkgcmVjYWxsIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIGFjdHVhbGx5ICpyZWFkKiB0d2ljZTogb25jZSBhdCB0aGUgYmVnaW5uaW5nIHRvIGluaXRpYWxpemUgYGFjdGl2ZV9hbm9uX3ZtYWAsIGFuZCB0aGVuIGxhdGVyIHRvIGFjcXVpcmUgYSBsb2NrLlxuXG5UaGUgY29tcGlsZXIgY291bGQgcG90ZW50aWFsbHkgcmVsb2FkIHRoZSB2YWx1ZS4gQnV0LCBtb3JlIGltcG9ydGFudGx5LCBpZiBhbm90aGVyIHRocmVhZCBpcyBwb3RlbnRpYWxseSB3cml0aW5nIHRvIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdoaWxlIHRoaXMgaXMgaGFwcGVuaW5nLCBLQ1NBTiBpcyBnb2luZyB0byBzcXVhd2ssIGV2ZW4gaWYgdGhlIHJlYWQgdmFsdWUgcmVtYWlucyB0aGUgc2FtZS4gVGhlIHNlY29uZCByZWFkIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGZvciB0aGUgbG9jaywgdGhhdCdzIHRoZSB0ZWxsLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBiZWluZyByZWFkIHR3aWNlLCBLQ1NBTiB3aWxsIGNvbXBsYWluIGlmIHRoZXJlJ3MgYSBjb25jdXJyZW50IHdyaXRlLlxuXG5TbywgaWYgdGhlcmUncyAqbm8qIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdvbid0IGZsYWcgYW55dGhpbmcuIEJ1dCBpZiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgd3JpdGUsIEtDU0FOIHdpbGwgZmxhZyB0aGUgZG91YmxlIHJlYWQuXG5cbk9rYXksIGlzIGBzcmMtXHUwMDNlYW5vbl92bWFgIG1vZGlmaWVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWA/IEJldHRlciBjaGVjayB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayB0aGVyZSBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTEzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjM2LjI4NjE4MTE3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzNSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzNTpcXHRzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG4gMjM2OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMjM3OlxcdFxcdFxcdFxcdFxcdCBlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0LyogVGhlIHdyaXRlIGxvY2sgbXVzdCBiZSBoZWxkLiAqL1xcbiAyNDA6XFx0XFx0bW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHNyYy1cXHUwMDNldm1fbW0pO1xcbiAyNDE6XFx0XFx0LyogSWYgbm90IGEgZm9yayB0aGVuIG11c3QgYmUgb24gc2FtZSBtbS4gKi9cXG4gMjQyOlxcdFxcdFZNX1dBUk5fT05fT05DRShvcGVyYXRpb24gIT0gVk1BX09QX0ZPUksgXFx1MDAyNlxcdTAwMjYgZHN0LVxcdTAwM2V2bV9tbSAhPSBzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQzOlxcdFxcbiAyNDQ6XFx0XFx0LyogSWYgd2UgaGF2ZSBhbnl0aGluZyB0byBkbyBzcmMtXFx1MDAzZWFub25fdm1hIG11c3QgYmUgcHJvdmlkZWQuICovXFxuIDI0NTpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNyYy1cXHUwMDNlYW5vbl92bWEgXFx1MDAyNlxcdTAwMjYgIWxpc3RfZW1wdHkoXFx1MDAyNnNyYy1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ2OlxcdFxcdFZNX1dBUk5fT05fT05DRSghc3JjLVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hKTtcXG4gMjQ3OlxcdFxcdC8qIFdlIGFyZSBlc3RhYmxpc2hpbmcgYSBuZXcgYW5vbl92bWFfY2hhaW4uICovXFxuIDI0ODpcXHRcXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtcXG4gMjQ5OlxcdFxcdC8qXFxuIDI1MDpcXHRcXHQgKiBPbiBmb3JrLCBkc3QtXFx1MDAzZWFub25fdm1hIGlzIHNldCBOVUxMICh0ZW1wb3JhcmlseSkuIE90aGVyd2lzZSwgYW5vbl92bWFcXG4gMjUxOlxcdFxcdCAqIG11c3QgYmUgdGhlIHNhbWUgYWNyb3NzIGRzdCBhbmQgc3JjLlxcbiAyNTI6XFx0XFx0ICovXFxuIDI1MzpcXHRcXHRWTV9XQVJOX09OX09OQ0UoZHN0LVxcdTAwM2Vhbm9uX3ZtYSBcXHUwMDI2XFx1MDAyNiBkc3QtXFx1MDAzZWFub25fdm1hICE9IHNyYy1cXHUwMDNlYW5vbl92bWEpO1xcbiAyNTQ6XFx0XFx0LypcXG4gMjU1OlxcdFxcdCAqIEVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gYWJvdmUgLSBpZiBub3QgYSBuby1vcCwgd2Ugc2hvdWxkIGV4cGVjdFxcbiAyNTY6XFx0XFx0ICogZHN0LVxcdTAwM2Vhbm9uX3ZtYSB0byBiZSBzZXQgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0IGEgZm9yay5cXG4gMjU3OlxcdFxcdCAqL1xcbiAyNTg6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSyBcXHUwMDI2XFx1MDAyNiBzcmMtXFx1MDAzZWFub25fdm1hIFxcdTAwMjZcXHUwMDI2XFxuIDI1OTpcXHRcXHRcXHRcXHQhZHN0LVxcdTAwM2Vhbm9uX3ZtYSk7XFxuIDI2MDpcXHRcXHQvKiBGb3IgdGhlIGFub25fdm1hIHRvIGJlIGNvbXBhdGlibGUsIGl0IGNhbiBvbmx5IGJlIHNpbmd1bGFyLiAqL1xcbiAyNjE6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKG9wZXJhdGlvbiA9PSBWTUFfT1BfTUVSR0VfVU5GQVVMVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDI2MjpcXHRcXHRcXHRcXHQhbGlzdF9pc19zaW5ndWxhcihcXHUwMDI2c3JjLVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbikpO1xcbiAyNjM6XFx0I2lmZGVmIENPTkZJR19QRVJfVk1BX0xPQ0tcXG4gMjY0OlxcdFxcdC8qIE9ubHkgbWVyZ2luZyBhbiB1bmZhdWx0ZWQgVk1BIGxlYXZlcyB0aGUgZGVzdGluYXRpb24gYXR0YWNoZWQuICovXFxuIDI2NTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9NRVJHRV9VTkZBVUxURUQgXFx1MDAyNlxcdTAwMjZcXG4gMjY2OlxcdFxcdFxcdFxcdHZtYV9pc19hdHRhY2hlZChkc3QpKTtcXG4gMjY3OlxcdCNlbmRpZlxcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjM2LjI4NjMyMzI2NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTE1ODc1NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9ucyBpbiBgYW5vbl92bWFfY2xvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgY2hlY2tfYW5vbl92bWFfY2xvbmVgIGZ1bmN0aW9uLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGl0ICpzaG91bGRuJ3QqIGJlIG1vZGlmeWluZyBgc3JjLVx1MDAzZWFub25fdm1hYCBkaXJlY3RseS4gQnV0IHRoZW4sIG15IG1pbmQgcmFjZXMg4oCTIHdoYXQgaWYgYW5vdGhlciB0aHJlYWQgd2VyZSB0byBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IFRoYXQgd291bGQgYmUgYSBzZXJpb3VzIGJ1ZywgZ2l2ZW4gd2UgaG9sZCB0aGUgbW1hcCBsb2NrLCByaWdodD8gVGhlIHN5c3RlbSBzaG91bGQgbm90IGFsbG93IHRoZSBzdGF0ZSB0byBjaGFuZ2Ugd2l0aCB0aGUgbG9jayBpbiBwbGFjZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrIGEgYml0LiBJcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBzcmNgIGl0c2VsZiB0byBiZSBtb2RpZmllZCBieSBhbm90aGVyIHRocmVhZD8gVGhhdCBzZWVtcyB1bmxpa2VseSwgYnV0IEkgaGF2ZSB0byBiZSB0aG9yb3VnaC4gT2theSwgc28gbG9va2luZyBhdCB0aGUgYGFub25fdm1hX2Nsb25lYCBmdW5jdGlvbiBpdHNlbGYsIEkgc2VlIHRoaXM6XG5cbmBgYGNcblx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuLi4uXG5cdGFub25fdm1hX3VubG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xuYGBgXG5cblNvLCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGJlaW5nIGNhbGxlZCBvbiBgc3JjLVx1MDAzZWFub25fdm1hYC4gSWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgcmVhZCB0d2ljZSwgYW5kIHRoZSBjb21waWxlciByZWxvYWRzIGl0LCBhbmQgaXQgaGFwcGVucyB0byBiZSBtb2RpZmllZCBpbiBiZXR3ZWVuLCBpdCB3b3VsZCBsb2NrIG9uZSB2ZXJzaW9uIG9mIHRoZSBhbm9uX3ZtYSBhbmQgdW5sb2NrIGFub3RoZXIhIFRoYXQgc291bmRzIHJlYWxseSBiYWQuIEhvd2V2ZXIsIGlmIGl0J3Mgbm90IG1vZGlmaWVkLCB0aGVuIHdoeSBpcyB0aGUgdmFyaWFibGUgY2hhbmdlZCBhdCBhbGw/IEl0IGZlZWxzIGxpa2UganVzdCBhIGNsZWFudXAgdG8gY29uc2lzdGVudGx5IHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgd291bGRuJ3QgYmUgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgSSdtIHByb2JhYmx5IG1pc3Npbmcgc29tZXRoaW5nLlxuXG5CdXQgdGhlbiwgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIGBzcmNgIGlzIGFjdHVhbGx5IGFuIGFsaWFzIGZvciBgZHN0YD8gSWYgYHNyYyA9PSBkc3RgLCB0aGVuIGBkc3QtXHUwMDNlYW5vbl92bWFgICppcyogbW9kaWZpZWQgaW5zaWRlIGBtYXliZV9yZXVzZV9hbm9uX3ZtYShkc3QsIGFub25fdm1hKWAuIFRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nISBJZiBgc3JjID09IGRzdGAsIHRoZW4sIHllcywgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKmlzKiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLiBTbywgYGFub25fdm1hX2xvY2tfd3JpdGUoc3JjLVx1MDAzZWFub25fdm1hKWAgd291bGQgbG9jayB0aGUgKm9sZCogYGFub25fdm1hYCBwb3RlbnRpYWxseSwgYnV0IHRoZW4gSSByZW1lbWJlciDigJMgYGFub25fdm1hX2xvY2tfd3JpdGVgIGlzIGNhbGxlZCBCRUZPUkUgdGhhdCBsb29wLlxuXG5MZXQncyBsb29rIGF0IHRoZSBmdWxsIGNvZGUgYmxvY2s6XG5cbmBgYGNcblx0YW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpO1xuXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcdTAwMjZkc3QtXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XG5cdFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGF2Yy1cdTAwM2Vhbm9uX3ZtYTtcblxuXHRcdGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KGF2YywgXHUwMDI2YW5vbl92bWEtXHUwMDNlcmJfcm9vdCk7XG5cdFx0aWYgKG9wZXJhdGlvbiA9PSBWTUFfT1BfRk9SSylcblx0XHRcdG1heWJlX3JldXNlX2Fub25fdm1hKGRzdCwgYW5vbl92bWEpO1xuXHR9XG5cblx0aWYgKG9wZXJhdGlvbiAhPSBWTUFfT1BfRk9SSylcblx0XHRkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzKys7XG5cblx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5gYGBcblxuU28sIG5vdyBJIHNlZSB0aGF0IGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCAqaXMqIGNhbGxlZCAqYmVmb3JlKiB0aGUgbG9vcCB3aGVyZSBgbWF5YmVfcmV1c2VfYW5vbl92bWFgIGlzIGNhbGxlZCwgYW5kIGV2ZW4gaWYgYHNyYyA9PSBkc3RgLCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWFkIGJlZm9yZSB0aGUgbW9kaWZpY2F0aW9uLiBPa2F5LCB0aGF0J3MgZ29vZC5cblxuQnV0LCB3YWl0Li4uIGNvdWxkIGBkc3QtXHUwMDNlYW5vbl92bWFgIGJlIG1vZGlmaWVkIGJ5IHRoaXMgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrK2A/IElmIGBzcmMgPT0gZHN0YCwgd291bGQgdGhlIHZhbHVlIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGdldCByZWFkIGFnYWluIGluIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgPyBObywgYmVjYXVzZSBgYW5vbl92bWFfbG9ja193cml0ZWAgaXMgc3RpbGwgY2FsbGVkIGJlZm9yZSB0aGF0IGxpbmUgb2YgY29kZS5cblxuT2theSwgaXMgaXQgcG9zc2libGUgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBldmFsdWF0ZWQgKndpdGhpbiogYGFub25fdm1hX2xvY2tfd3JpdGVgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGZ1bmN0aW9uJ3MgY29kZSBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6NDcuNDQ1MDgxNDU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTU1MjUxNDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgYW5vbl92bWFfbG9ja193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjQ3LjgwMDYxNDU2M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg5MDc1NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gYGFub25fdm1hX2xvY2tfd3JpdGVgKipcblxuQWxyaWdodCwgdGhlIHF1ZXJ5IGlzIGNsZWFyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgdmlydHVhbCBtZW1vcnkgYXJlYXMsIGFuZCB0aGUgXCJsb2NrX3dyaXRlXCIgcGFydCBpbXBsaWVzIGEgd3JpdGUtcmVsYXRlZCBsb2NraW5nIG1lY2hhbmlzbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgYW5vbnltb3VzIG1lbW9yeSByZWdpb25zLCBsaWtlbHkgZHVyaW5nIG9wZXJhdGlvbnMgbGlrZSBwYWdlIGZhdWx0IGhhbmRsaW5nLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gKHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZNQSBpdHNlbGYpLCBvciBwZXJoYXBzIGV2ZW4gd2hlbiBoYW5kbGluZyBjb3B5LW9uLXdyaXRlIHNjZW5hcmlvcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyB1c2VkIHRvIGNvbmZpcm0gdGhvc2UgaW5pdGlhbCBhc3N1bXB0aW9ucy4gVGltZSB0byBoaXQgdGhlIGNvZGUgc2VhcmNoLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDo1MS4wODk2OTMxNzdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI5MTkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9NDAyMz1zdGF0aWMgaW50IF9fZm9saW9fc3BsaXQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3MS1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzo0MDcyOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDA3My1cXHRcXHRtYXBwaW5nID0gTlVMTDtcXG4tLVxcbm1tL2ludGVybmFsLmg9MjEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSlcXG4tLVxcbm1tL2ludGVybmFsLmgtMjE3LVxcbm1tL2ludGVybmFsLmg6MjE4OnN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxubW0vaW50ZXJuYWwuaC0yMTkte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEyNzg9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfaHVnZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTM0OS1cXG5tbS9raHVnZXBhZ2VkLmM6MTM1MDpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL2todWdlcGFnZWQuYy0xMzUxLVxcdGFub25fdm1hX2xvY2tlZCA9IHRydWU7XFxuLS1cXG5tbS9tcmVtYXAuYz0xNDM9c3RhdGljIHZvaWQgdGFrZV9ybWFwX2xvY2tzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vbXJlbWFwLmMtMTQ3LVxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKVxcbm1tL21yZW1hcC5jOjE0ODpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL21yZW1hcC5jLTE0OS19XFxuLS1cXG5tbS9ybWFwLmM9MTEwPXN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuLS1cXG5tbS9ybWFwLmMtMTMyLVxcdGlmIChyd3NlbV9pc19sb2NrZWQoXFx1MDAyNmFub25fdm1hLVxcdTAwM2Vyb290LVxcdTAwM2Vyd3NlbSkpIHtcXG5tbS9ybWFwLmM6MTMzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0xMzQtXFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMDctXFxubW0vcm1hcC5jOjIwODpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFub25fdm1hKTtcXG5tbS9ybWFwLmMtMjA5LVxcdC8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqL1xcbi0tXFxubW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTM3OD1pbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKVxcbi0tXFxubW0vcm1hcC5jLTQzNS1cXHQvKiBOb3cgbGV0IHJtYXAgc2VlIGl0LiAqL1xcbm1tL3JtYXAuYzo0MzY6XFx0YW5vbl92bWFfbG9ja193cml0ZShhbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQzNy1cXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuLS1cXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00OTItXFxubW0vcm1hcC5jOjQ5MzpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQ5NC1cXG4tLVxcbm1tL3JtYXAuYz02MzM9c3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy02ODktXFx0XFx0ICogYW5kIGJhaWwgLS0gY2FuJ3Qgc2ltcGx5IHVzZSBwdXRfYW5vbl92bWEoKSBiZWNhdXNlXFxubW0vcm1hcC5jOjY5MDpcXHRcXHQgKiB3ZSdsbCBkZWFkbG9jayBvbiB0aGUgYW5vbl92bWFfbG9ja193cml0ZSgpIHJlY3Vyc2lvbi5cXG5tbS9ybWFwLmMtNjkxLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1hLmM9MjkxPXN0YXRpYyB2b2lkIHZtYV9wcmVwYXJlKHN0cnVjdCB2bWFfcHJlcGFyZSAqdnApXFxuLS1cXG5tbS92bWEuYy0zMTMtXFx0aWYgKHZwLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL3ZtYS5jOjMxNDpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZwLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzE1LVxcdFxcdGFub25fdm1hX2ludGVydmFsX3RyZWVfcHJlX3VwZGF0ZV92bWEodnAtXFx1MDAzZXZtYSk7XFxuLS1cXG5tbS92bWEuYz0zMTE3PWludCBleHBhbmRfdXB3YXJkcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubW0vdm1hLmMtMzE2NS1cXHQvKiBXZSB1cGRhdGUgdGhlIGFub24gVk1BIHRyZWUuICovXFxubW0vdm1hLmM6MzE2NjpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKHZtYS1cXHUwMDNlYW5vbl92bWEpO1xcbm1tL3ZtYS5jLTMxNjctXFxuLS1cXG5tbS92bWEuYz0zMjAzPWludCBleHBhbmRfZG93bndhcmRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuLS1cXG5tbS92bWEuYy0zMjQ0LVxcdC8qIFdlIHVwZGF0ZSB0aGUgYW5vbiBWTUEgdHJlZS4gKi9cXG5tbS92bWEuYzozMjQ1OlxcdGFub25fdm1hX2xvY2tfd3JpdGUodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxubW0vdm1hLmMtMzI0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTA6NTEuMjA2OTkwNzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE4MDU4NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkRpZ2dpbmcgaW50byBgYW5vbl92bWFfbG9ja193cml0ZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYW5vbl92bWFfbG9ja193cml0ZWAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgb3V0IGlzIHRoYXQgaXQncyBhbiBpbmxpbmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGltbWVkaWF0ZWx5LiBJdCdzIHByb2JhYmx5IHJlbGF0aXZlbHkgc2hvcnQgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbC4gVGhlIGNvbXBpbGVyIGlzIGdvaW5nIHRvIHRyeSB0byBzdWJzdGl0dXRlIHRoZSBmdW5jdGlvbidzIGNvZGUgZGlyZWN0bHkgd2hlcmV2ZXIgaXQncyBjYWxsZWQgdG8gYXZvaWQgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIGluZGljYXRvciB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgZnVuZGFtZW50YWwgYW5kIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQW5kIHRoZSBmYWN0IHRoYXQgaXQncyBkZWZpbmVkIGluIGBtbS9pbnRlcm5hbC5oYCBjb25maXJtcyBteSBpbml0aWFsIGh5cG90aGVzaXMgdGhhdCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IHdvcmtpbmdzLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGxvY2tpbmcgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MDo1Ny4zODc1NzkzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ludGVybmFsLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjE4LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbm9uX3ZtYV9sb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDIxOTpcXHR7XFxuIDIyMDpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcm9vdC1cXHUwMDNlcndzZW0pO1xcbiAyMjE6XFx0fVxcbiAyMjI6XFx0XFxuIDIyMzpcXHRzdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV90cnlsb2NrX3dyaXRlKHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpXFxuIDIyNDpcXHR7XFxuIDIyNTpcXHRcXHRyZXR1cm4gZG93bl93cml0ZV90cnlsb2NrKFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcm9vdC1cXHUwMDNlcndzZW0pO1xcbiAyMjY6XFx0fVxcbiAyMjc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUwOjU3LjM4NzcwMzY0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjk4NTcwMzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIERhdGEgUmFjZXMgaW4gYGFub25fdm1hX2Nsb25lYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgdXNlIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB0aGUgYGFub25fdm1hX2xvY2tfd3JpdGVgIGZ1bmN0aW9uLiBUaGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoYXQgcmVhZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYCB0d2ljZSBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLCBvciBpbmRpY2F0ZSBhIHJlYWwgYnVnIGlmIGl0J3MgbW9kaWZpYWJsZS4gTGV0J3MgdHJhY2UgaXQgY2FyZWZ1bGx5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgc3JjYCBwb2ludGVyIGRvZXNuJ3QgZ2V0IG1vZGlmaWVkIGJ5IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBhbmQgaW5kZWVkLCB0aGF0IGZ1bmN0aW9uIHRvdWNoZXMgYGF2Yy1cdTAwM2V2bWFgIGFuZCBgYXZjLVx1MDAzZWFub25fdm1hYCwgbm90IHRoZSBzb3VyY2UuICBXYWl0LCBpZiBgc3JjID09IGRzdGAsIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgd291bGQgY3JlYXRlIGFuIGluZmluaXRlIGxvb3AsIHNvIHRoZSBjb21waWxlciB3b3VsZCBwcm9iYWJseSBjYXRjaCB0aGlzLCBidXQgdGhlIGZ1bmN0aW9uIHdvdWxkIGJlIHZlcnkgcHJvYmxlbWF0aWMuICBTbyBgc3JjYCBjYW5ub3QgYmUgZXF1YWwgdG8gYGRzdGAuXG5cbkkgd2FzIGFsc28gYXNraW5nIG15c2VsZiBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4gYmUgbW9kaWZpZWQgZWxzZXdoZXJlIGluIGBhbm9uX3ZtYV9jbG9uZWAuICBJdCBzZWVtcyBuby4gVGhlIGNvbXBpbGVyIHJlbG9hZHMgbWlnaHQgYmUgYSBwcm9ibGVtLCBidXQgaXQncyBub3QuIFRoZW4sIGl0IGhpdHMgbWUgdGhhdCBgZHVwX2Fub25fdm1hYCBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiBCdXQsIGhlcmUgYHNyY2AgYW5kIGBkc3RgIGFyZSBkaWZmZXJlbnQuIEFsc28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBzcmNgIGlzIGZyZWVkLCBidXQgd2UgYXJlIGhvbGRpbmcgdGhlIG1tYXAgbG9jay5cblxuU28gdGhlIG1haW4gdGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0gaXMgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBub3QgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgY29kZSBjb21tZW50cyBpbiBgYW5vbl92bWFfY2xvbmVgIHRhbGsgYWJvdXQgdGhlIG1tYXAgbG9jay4gSXQgc2F5cyBcIkVpdGhlciBzcmMsIGRzdCBoYXZlIHRoZSBzYW1lIG1tIGZvciB3aGljaCB3ZSBob2xkIGFuIGV4Y2x1c2l2ZSBtbWFwIHdyaXRlIGxvY2tcIi4gVGhpcyBzZWVtcyBwcmV0dHkgZGVmaW5pdGl2ZS4gIFdpdGggdGhlIG1tYXAgd3JpdGUgbG9jaywgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaGF0IGxvY2sgaXMgaGVsZCBkdXJpbmcgYFZNQV9PUF9TUExJVGAgYW5kIGluIGBfX3NwbGl0X3ZtYWAsIHNvIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHByb2JsZW0uXG5cbk5vdywgSSB3YXMgdGhpbmtpbmcgYWJvdXQgYHBhZ2VfZmF1bHRgLiBgcGFnZV9mYXVsdGAgdXNlcyB0aGUgbW1hcCByZWFkIGxvY2suIElmIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYHBhZ2VfZmF1bHRgIGNhbid0IHJ1biBjb25jdXJyZW50bHkuIEJ1dCwgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjb25maXJtcyB0aGF0IHRoZSB3cml0ZSBsb2NrIGlzIEFMV0FZUyBoZWxkLCBzbyBvdGhlciB0aHJlYWRzIGNhbm5vdCBtb2RpZnkgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIEl0IGlzIGp1c3QgYSBgdm9pZGAgdGhhdCBvbmx5IGRvZXMgYSBgVk1fV0FSTl9PTl9PTkNFYC5cblxuV2FpdCwgY291bGQgc29tZXRoaW5nIGVsc2UgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBOby4gVGhlIG1vZGlmaWNhdGlvbiBpcyBhbHdheXMgaW4gYGRzdC1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBtYWluIHF1ZXN0aW9uIGlzIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCwgc28gaXQgc2hvdWxkIGJlIGZpbmUuICBOb3csIHRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMuXG5cbkJ1dCB0aGVuIEkgcmVhbGl6ZS4gV2FpdCEgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzOiBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYCB0byBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpYC4gVGhlIHZhcmlhYmxlIGBhY3RpdmVfYW5vbl92bWFgIGlzIGFzc2lnbmVkIGFzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGluIHRoZSBmdW5jdGlvbi5cblxuU28sIHVubGVzcyBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4gY2hhbmdlLCB0aGlzIGRvZXNuJ3QgbWF0dGVyLiBUaGUgbmV4dCB0aGluZyBJIHJlYWxpemVkIGlzIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGNvdWxkIGhhdmUgYSBwcm9ibGVtIGlmIGFub3RoZXIgdGhyZWFkIGlzIG1vZGlmeWluZyB0aGUgdmFyaWFibGUgaW4gdGhlIGxvb3AuXG5cblRoZSBzb2x1dGlvbiBpcyBgQ09ORklHX1BFUl9WTUFfTE9DS2AsIG5vdyBJJ20gdGhpbmtpbmcgd2hldGhlciBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBiZSBtb2RpZmllZCB1bmRlciB0aGUgcGVyLVZNQSBsb2NrISAgSXQgbG9va3MgbGlrZSB0aGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHBhZ2UgZmF1bHRzLCB1c2luZyB0aGUgcGVyLVZNQSBsb2NrLCBjYW4gbW9kaWZ5IGEgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDg5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUxOjIwLjM3MzQxMDEwOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk5NzYwMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIxMS1cXHRpZiAobGlrZWx5KCF2bWEtXFx1MDAzZWFub25fdm1hKSkge1xcbm1tL3JtYXAuYzoyMTI6XFx0XFx0dm1hLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0yMTMtXFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUxOjIxLjI3MzE3Njc2NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM3NzIxMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgX19hbm9uX3ZtYV9wcmVwYXJlYCBhbmQgVk1BIExvY2tpbmcqKlxuXG5Pa2F5LCB3YWl0IGEgbWludXRlLiBMb29raW5nIGF0IHRoaXMgY29kZSwgYF9fYW5vbl92bWFfcHJlcGFyZWAgY2xlYXJseSBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgc3RydWN0dXJlLiBUaGF04oCZcyBhIGtleSBwaWVjZS4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCByZWFsbHkgbWF0dGVycyBmb3Igc3RhYmlsaXR5IGFuZCBjb25jdXJyZW5jeSBpbiBtZW1vcnkgbWFuYWdlbWVudCwgaXMgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbiwgYF9fYW5vbl92bWFfcHJlcGFyZWAsIGlzIG9wZXJhdGluZyB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiB0aGUgcGVyLVZNQSBsb2NrLiBJZiBpdCdzIG5vdCwgd2UgaGF2ZSBhIHNlcmlvdXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHRoYXQgbmVlZHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIFJpZ2h0LCB0aW1lIHRvIGRpdmUgYmFjayBpbnRvIHRoZSBjb2RlIGFuZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYW5vbl92bWFfcHJlcGFyZWAgaXRzZWxmIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgcmlnaHQgbG9ja3MgYXJlIGJlaW5nIGhlbGQgd2hlbiBpdCBtb2RpZmllcyB0aGUgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuIEknbGwgdmVyaWZ5IHRoaXMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyNC43MTA5MDA0ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTk5MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fYW5vbl92bWFfcHJlcGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0yNjA9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSk7XFxubW0vaW50ZXJuYWwuaDoyNjE6aW50ICBfX2Fub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbm1tL2ludGVybmFsLmgtMjYyLXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTI2ND1zdGF0aWMgaW5saW5lIGludCBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0yNjgtXFxubW0vaW50ZXJuYWwuaDoyNjk6XFx0cmV0dXJuIF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpO1xcbm1tL2ludGVybmFsLmgtMjcwLX1cXG4tLVxcbm1tL21lbW9yeS5jPTM3OTM9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM4MTAtICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxubW0vbWVtb3J5LmM6MzgxMTogKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxubW0vbWVtb3J5LmMtMzgxMi0gKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbi0tXFxubW0vbWVtb3J5LmM9MzgxOD12bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTM4MjgtXFx0fVxcbm1tL21lbW9yeS5jOjM4Mjk6XFx0aWYgKF9fYW5vbl92bWFfcHJlcGFyZSh2bWEpKVxcbm1tL21lbW9yeS5jLTM4MzAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfT09NO1xcbi0tXFxubW0vcm1hcC5jPTE1MD1zdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9hc3NpZ24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMTU5LS8qKlxcbm1tL3JtYXAuYzoxNjA6ICogX19hbm9uX3ZtYV9wcmVwYXJlIC0gYXR0YWNoIGFuIGFub25fdm1hIHRvIGEgbWVtb3J5IHJlZ2lvblxcbm1tL3JtYXAuYy0xNjEtICogQHZtYTogdGhlIG1lbW9yeSByZWdpb24gaW4gcXVlc3Rpb25cXG4tLVxcbm1tL3JtYXAuYy0xODQtICovXFxubW0vcm1hcC5jOjE4NTppbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3JtYXAuYy0xODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyNC43NjI5MDUwOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzk4NzQwMDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBfX3ZtZl9hbm9uX3ByZXBhcmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX192bWZfYW5vbl9wcmVwYXJlYCBmdW5jdGlvbiwgYW5kIHRoZSBjb21tZW50IGlzIGltbWVkaWF0ZWx5IHRocm93aW5nIHVwIGEgZmxhZy4gSXQgc2F5cyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgKm9ubHkqIHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGxvY2tzLiBJdCBhbHNvIHNheXMgdGhhdCBhIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlIGBtbWFwX2xvY2tgIGhlbGQuIFdoeT8gQWgsIGl0J3MgYmVjYXVzZSBgX19hbm9uX3ZtYV9wcmVwYXJlKClgIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyAqYWRqYWNlbnQqIFZNQXMgdG8gc2VlIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYGFub25fdm1hYC4gVGhhdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBpc3N1ZSDigJMgdHJ5aW5nIHRvIGxvb2sgYXQgbmVpZ2hib3JpbmcgbWVtb3J5IHJlZ2lvbnMgd2hpbGUgaG9sZGluZyBvbmx5IGEgcGVyLVZNQSBsb2NrLiBJdCdzIG5vdCBzYWZlLlxuXG5TbywgaWYgYF9fYW5vbl92bWFfcHJlcGFyZWAgaXMgdW5zYWZlIHRvIGNhbGwgdW5kZXIgdGhlIHBlci1WTUEgbG9jaywgZG9lcyBgdm1mX2Fub25fcHJlcGFyZWAgdGhlbiByZXR1cm4gYFZNX0ZBVUxUX1JFVFJZYCBpZiBjYWxsZWQgdW5kZXIgdGhlIHBlci1WTUEgbG9jaz8gSXQgc2VlbXMgbGlrZWx5LiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgb2YgYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gY29uZmlybSB0aGlzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MToyOS41NjE2NDc5MjNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MTA6XFx0ICogb25seSBwcm90ZWN0ZWQgYnkgdGhlIHBlci1WTUEgbG9jaywgdGhlIGNhbGxlciBtdXN0IHJldHJ5IHdpdGggdGhlXFxuMzgxMTpcXHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXFxuMzgxMjpcXHQgKiBkZXRlcm1pbmUgaWYgdGhpcyBWTUEgY2FuIHNoYXJlIGl0cyBhbm9uX3ZtYSwgYW5kIHRoYXQncyBub3Qgc2FmZSB0b1xcbjM4MTM6XFx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXFxuMzgxNDpcXHQgKlxcbjM4MTU6XFx0ICogUmV0dXJuOiAwIGlmIGZhdWx0IGhhbmRsaW5nIGNhbiBwcm9jZWVkLiAgQW55IG90aGVyIHZhbHVlIHNob3VsZCBiZVxcbjM4MTY6XFx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cXG4zODE3OlxcdCAqL1xcbjM4MTg6XFx0dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMzgxOTpcXHR7XFxuMzgyMDpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbjM4MjE6XFx0XFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbjM4MjI6XFx0XFxuMzgyMzpcXHRcXHRpZiAobGlrZWx5KHZtYS1cXHUwMDNlYW5vbl92bWEpKVxcbjM4MjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzgyNTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODI2OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzgyNzpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgyODpcXHRcXHR9XFxuMzgyOTpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzgzMDpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzgzMTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuMzgzMjpcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbjM4MzM6XFx0XFx0cmV0dXJuIHJldDtcXG4zODM0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTE6MjkuNTYxOTMxMjkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NTY0NDc1NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgYW5vbl92bWFfY2xvbmVgIGFuZCBQb3RlbnRpYWwgRGF0YSBSYWNlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG9zc2libGUgZGF0YSByYWNlIHJlcG9ydGVkIGJ5IEtDU0FOLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBjb25jdXJyZW50IGFjY2VzcyB0byBgc3JjLVx1MDAzZWFub25fdm1hYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgdGFrZXMgdGhlIG1tYXAgcmVhZCBsb2NrLCBpbXBseWluZyB0aGF0IGB2bWEtXHUwMDNlYW5vbl92bWFgIGlzbid0IG1vZGlmaWVkIHVuZGVyIGp1c3QgdGhlIHBlci1WTUEgbG9jay4gVGhlIGBhbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLCBzdWdnZXN0aW5nIHRoYXQgbm8gb3RoZXIgdGhyZWFkIHNob3VsZCBiZSBhYmxlIHRvIG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYCBjb25jdXJyZW50bHkuXG5cbkJ1dCB3YWl0LCB3aHkgd2FzIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNoYW5nZWQgdG8gYGFjdGl2ZV9hbm9uX3ZtYWA/IExldCdzIHRyYWNlIGl0IHRocm91Z2g6IGBzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtgLiBIbW0sIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgTlVMTD8gVGhlIGNoZWNrIGBpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkgcmV0dXJuIDA7YCBoYW5kbGVzIHRoYXQgY2FzZSBlYXJseS4gU28sIGF0IGxlYXN0IGluaXRpYWxseSwgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgTlVMTC5cblxuQ291bGQgc29tZXRoaW5nIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgIGl0c2VsZiBhbHRlciBgc3JjLVx1MDAzZWFub25fdm1hYD8gVGhlIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgZnVuY3Rpb24gc2VlbXMgaW5ub2N1b3VzLCBqdXN0IGEgYnVuY2ggb2YgYFZNX1dBUk5fT05fT05DRWAgY2FsbHMuIEl0IGNhbid0IGNoYW5nZSBpdC4gVGhlbiB3aGF0IGFib3V0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gPyBDb3VsZCB0aGF0IG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYD8gTm8sIGl0IGxvb2tzIGxpa2UgaXQgb3BlcmF0ZXMgb24gYGRzdC1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAsIG5vdCBgc3JjLVx1MDAzZWFub25fdm1hYC4gSXQgaXMgbG9va2luZyBhdCB0aGUgY2hhaW4gd2l0aGluIGBzcmNgLCBidXQgdGhhdCBpcyBhIGNoYWluIG9mIGBhbm9uX3ZtYWAgb2JqZWN0cy5cblxuSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHNyY2AgY291bGQgYmUgYW4gYWxpYXMgZm9yIGBkc3RgPyBJZiBgc3JjID09IGRzdGAsIHRoZW4gYSBsb29wIG1pZ2h0IGhhcHBlbiB3aXRoIHRoZSBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoZSBgZHVwX2Fub25fdm1hYCBmdW5jdGlvbiBzZXRzIGBkc3QtXHUwMDNlYW5vbl92bWEgPSBzcmMtXHUwMDNlYW5vbl92bWFgIGJlZm9yZSBjYWxsaW5nIGBhbm9uX3ZtYV9jbG9uZWAsIHNvIHRoZSBsb2NrIHdvdWxkIHByZXZlbnQgYW55IGlzc3Vlcy4gTG9va2luZyBpbnNpZGUgYGFub25fdm1hX2Nsb25lYCdzLCBhZnRlciB0aGUgY2xvbmUsIGBkc3QtXHUwMDNlYW5vbl92bWEtXHUwMDNlbnVtX2FjdGl2ZV92bWFzKytgIGlzIGV4ZWN1dGVkLiBJbiB0aGlzIGNhc2UsIGBzcmMtXHUwMDNlYW5vbl92bWFgJ3MgYG51bV9hY3RpdmVfdm1hc2AgaXMgbW9kaWZpZWQgYW5kIHRoaXMgY291bGQgZ2l2ZSBhIGZhbHNlIHNlbnNlIG9mIGEgZGF0YSByYWNlLiBIb3dldmVyLCB0aGlzIG9ubHkgbW9kaWZpZXMgYSB2YWx1ZSwgbm90IHRoZSBwb2ludGVyIGl0c2VsZi5cblxuVGhlbiB0aGUga2V5IHF1ZXN0aW9uOiBDb3VsZCBhIEtDU0FOIGNvbXBsYWludCBiZSBkdWUgdG8gYW5vdGhlciB0aHJlYWQgcmVhZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYD8gUmVtZW1iZXIsIGBhbm9uX3ZtYV9jbG9uZWAgcmVhZHMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgdHdpY2UuIEhvd2V2ZXIsIG5vIG90aGVyIHRocmVhZCBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0byBgc3JjLVx1MDAzZWFub25fdm1hYCBzaW5jZSB3ZSBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2shIFRoZSBgYW5vbl92bWFfZm9ya2AgZnVuY3Rpb24gZG9lcyBjYWxsIGBhbm9uX3ZtYV9jbG9uZWAsIGhvd2V2ZXIgdGhlIGBzcmNgIFZNQSBpcyBsb2NrZWQuIFNvIHRoZSBwYXJlbnQgY2Fubm90IG1vZGlmeSBpdC5cblxuU28sIGluIHRoZW9yeSwgaWYgYSBkaWZmZXJlbnQgdGhyZWFkIGlzIHJlYWRpbmcgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aG91dCBhIGxvY2ssIHRoZXJlIG1pZ2h0IGJlIGEgZGF0YSByYWNlLiBCdXQsIHdlIGhvbGQgdGhlIG1tYXAgd3JpdGUgbG9jaywgYW5kIHRoZSBwYXJlbnQgaXMgYWxzbyBsb2NrZWQuIFNvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uXG5cbkxldCBtZSBzZWFyY2ggZm9yIHRoZSBjb21taXQgbWVzc2FnZS4gQWhhISBUaGUgY29tbWl0IGA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljYCBjaGFuZ2VzIHRoZSBsb2NrLiBXaHkgd2FzIHRoYXQgbmVlZGVkPyBMZXQncyBsb29rIGFnYWluOlxuYGBgY1xuXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cdTAwM2Vhbm9uX3ZtYTtcbi4uLlxuXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XG5gYGBcblxuV2hhdCBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBOVUxMIGF0IHRoZSB0aW1lIG9mIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYD9cbkhvdyBjb3VsZCBpdCBiZSBOVUxMP1xuSWYgYHNyY2AgaXMgYGRzdGA/IE5vLlxuSWYgYHNyY2AgaXMgbW9kaWZpZWQ/XG5cbkxvb2tpbmcgYXQgY2FsbHMgdG8gYGFub25fdm1hX2Nsb25lYCwgdGhlIGBzcmNgIGFuZCBgZHN0YCB2bV9hcmVhcyBhcmUgYWx3YXlzIGRpZmZlcmVudC5cblNvIGBzcmNgIG5ldmVyIGNoYW5nZXMuIFRodXMsIGBzcmMtXHUwMDNlYW5vbl92bWFgIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZC4gQW5kIHRoZSBjaGFuZ2UgaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxMjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTg4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTE6NTQuMTI2NDA4OThaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4gMzIxOlxcdFxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuIDMyMjpcXHR7XFxuIDMyMzpcXHRcXHRzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKnBhdmM7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFjdGl2ZV9hbm9uX3ZtYSA9IHNyYy1cXHUwMDNlYW5vbl92bWE7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdGNoZWNrX2Fub25fdm1hX2Nsb25lKGRzdCwgc3JjLCBvcGVyYXRpb24pO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSlcXG4gMzI5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHQvKlxcbiAzMzI6XFx0XFx0ICogQWxsb2NhdGUgQVZDcy4gV2UgZG9uJ3QgbmVlZCBhbiBhbm9uX3ZtYSBsb2NrIGZvciB0aGlzIGFzIHdlXFxuIDMzMzpcXHRcXHQgKiBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZ1xcbiAzMzQ6XFx0XFx0ICogYW5vbl92bWEgc3RhdGlzdGljcy5cXG4gMzM1OlxcdFxcdCAqXFxuIDMzNjpcXHRcXHQgKiBFaXRoZXIgc3JjLCBkc3QgaGF2ZSB0aGUgc2FtZSBtbSBmb3Igd2hpY2ggd2UgaG9sZCBhbiBleGNsdXNpdmUgbW1hcFxcbiAzMzc6XFx0XFx0ICogd3JpdGUgbG9jaywgb3Igd2UgYXJlIGZvcmtpbmcgYW5kIHdlIGhvbGQgaXQgb24gc3JjLVxcdTAwM2V2bV9tbSBhbmQgZHN0IGlzXFxuIDMzODpcXHRcXHQgKiBub3QgeWV0IGFjY2Vzc2libGUgdG8gb3RoZXIgdGhyZWFkcyBzbyB0aGVyZSdzIG5vIHBvc3NpYmxpaXR5IG9mIHRoZVxcbiAzMzk6XFx0XFx0ICogdW5saW5rZWQgQVZDJ3MgYmVpbmcgb2JzZXJ2ZWQgeWV0LlxcbiAzNDA6XFx0XFx0ICovXFxuIDM0MTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsIFxcdTAwMjZzcmMtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbiAzNDI6XFx0XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDM0MzpcXHRcXHRcXHRpZiAoIWF2YylcXG4gMzQ0OlxcdFxcdFxcdFxcdGdvdG8gZW5vbWVtX2ZhaWx1cmU7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbihkc3QsIGF2YywgcGF2Yy1cXHUwMDNlYW5vbl92bWEpO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKlxcbiAzNTA6XFx0XFx0ICogTm93IGxpbmsgdGhlIGFub25fdm1hJ3MgYmFjayB0byB0aGUgbmV3bHkgaW5zZXJ0ZWQgQVZDcy5cXG4gMzUxOlxcdFxcdCAqIE5vdGUgdGhhdCBhbGwgYW5vbl92bWEncyBzaGFyZSB0aGUgc2FtZSByb290LlxcbiAzNTI6XFx0XFx0ICovXFxuIDM1MzpcXHRcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM1NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoYXZjLCBcXHUwMDI2ZHN0LVxcdTAwM2Vhbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpIHtcXG4gMzU1OlxcdFxcdFxcdHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhdmMtXFx1MDAzZWFub25fdm1hO1xcbiAzNTY6XFx0XFxuIDM1NzpcXHRcXHRcXHRhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2luc2VydChhdmMsIFxcdTAwMjZhbm9uX3ZtYS1cXHUwMDNlcmJfcm9vdCk7XFxuIDM1ODpcXHRcXHRcXHRpZiAob3BlcmF0aW9uID09IFZNQV9PUF9GT1JLKVxcbiAzNTk6XFx0XFx0XFx0XFx0bWF5YmVfcmV1c2VfYW5vbl92bWEoZHN0LCBhbm9uX3ZtYSk7XFxuIDM2MDpcXHRcXHR9XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdGlmIChvcGVyYXRpb24gIT0gVk1BX09QX0ZPUkspXFxuIDM2MzpcXHRcXHRcXHRkc3QtXFx1MDAzZWFub25fdm1hLVxcdTAwM2VudW1fYWN0aXZlX3ZtYXMrKztcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuIDM2NjpcXHRcXHRyZXR1cm4gMDtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0IGVub21lbV9mYWlsdXJlOlxcbiAzNjk6XFx0XFx0Y2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MTo1NC4xMjY1Njc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMDc2MDUxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3VzcGVjdGVkIERhdGEgUmFjZSoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhpcyBwYXRjaCBjaGFuZ2VkIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSlgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBpcyB0aGUgc2FtZSBhcyBgc3JjLVx1MDAzZWFub25fdm1hYC4gU28sIHdoeSB0aGUgY2hhbmdlP1xuXG5GaXJzdCwgSSBuZWVkIHRvIHJ1bGUgb3V0IHRoZSBvYnZpb3VzLiBDb3VsZCBgc3JjLVx1MDAzZWFub25fdm1hYCBiZSBtb2RpZmllZCBkaXJlY3RseSBieSBzb21lIG90aGVyIGZ1bmN0aW9uIGxpa2UgYGFub25fdm1hX2NoYWluX2Fzc2lnbmAsIGBjbGVhbnVwX3BhcnRpYWxfYW5vbl92bWFzYCwgb3IgYGFub25fdm1hX2NoYWluX2FsbG9jYD8gTm8sIHRob3NlIGRvbid0IHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLlxuXG5Ob3csIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb24ga2VlcHMgcG9wcGluZyBpbnRvIG15IGhlYWQuIElzIGl0IHBvc3NpYmxlIGEgY29uY3VycmVudCB0aHJlYWQgY291bGQgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBObywgd2FpdCEgSSd2ZSBiZWVuIHRocm91Z2ggdGhpcyBiZWZvcmUuIFdlICpzaG91bGQqIGJlIGhvbGRpbmcgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYCwgd2hpY2ggd291bGQgcHJldmVudCBhbnkgb3RoZXIgdGhyZWFkIGZyb20gbW9kaWZ5aW5nIGl0IGNvbmN1cnJlbnRseS5cblxuQnV0Li4uIGhhbmcgb24uIFRoZSBjb21tZW50IGhlcmUuLi4gc2F5cyBzb21ldGhpbmcgYWJvdXQgYWxsb2NhdGluZyBBVkNzLiBJdCBzdGF0ZXMsIGFuZCBJIHF1b3RlLCBcIldlIGRvbid0IG5lZWQgYW4gYW5vbl92bWEgbG9jayBmb3IgdGhpcyBhcyB3ZSBhcmUgbm90IHVwZGF0aW5nIHRoZSBhbm9uX3ZtYSByYnRyZWUgbm9yIGFyZSB3ZSBjaGFuZ2luZyBhbm9uX3ZtYSBzdGF0aXN0aWNzLlwiIE9rYXksIHNvIHRoZSBsb2NrIGlzbid0IHN0cmljdGx5ICpyZXF1aXJlZCogZm9yIEFWQyBhbGxvY2F0aW9uIGl0c2VsZi4gVGhlIGNvbW1lbnQgdGhlbiBzdGF0ZXMgZWl0aGVyIGBzcmNgLCBgZHN0YCBoYXZlIHRoZSBzYW1lIG1tIHdoaWNoIHdlIGhvbGQgYW4gZXhjbHVzaXZlIG1tYXAgd3JpdGUgbG9jaywgb3IgaWYgZm9ya2luZywgd2UgaG9sZCBpdCBvbiBgc3JjLVx1MDAzZXZtX21tYC5cblxuU28sIGluICphbGwqIGNhc2VzIOKAkyB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgbWVtb3J5IG1hcCBvciB3ZSBhcmUgZm9ya2luZyDigJMgd2Ugc2hvdWxkIGJlIGhvbGRpbmcgdGhhdCBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAuIFNvLCBubyBvdGhlciB0aHJlYWQgc2hvdWxkIGJlIGFibGUgdG8gdG91Y2ggYHNyYy1cdTAwM2Vhbm9uX3ZtYWAhXG5cblRoZW4gd2h5IHRoZSBjaGFuZ2U/IElzIHRoaXMgYSBLQ1NBTiBkYXRhIHJhY2UgZGV0ZWN0aW9uIHRoaW5nPyBLQ1NBTiBwaWNrcyB1cCBhIHJhY2Ugd2hlbiB0aGVyZSBpcyBhIGNvbmN1cnJlbnQgcmVhZCBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBidXQgdGhlcmUgc2hvdWxkbid0IGJlIGEgY29uY3VycmVudCB3cml0ZSBoZXJlISBUaGUgd3JpdGUgbG9jayAqc2hvdWxkKiBndWFyYW50ZWUgdGhhdC5cblxuT2theSwgbGV0IG1lIHRoaW5rLiBJcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIHdyaXR0ZW4gYnkgYSB0aHJlYWQgdGhhdCBkb2VzICpub3QqIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jaz8gVGhpcyBtYWtlcyBtZSB0aGluayAtIGlzIHRoZXJlIGFueSBjb2RlIGluIHRoZSBjb2RlYmFzZSB0aGF0IHdyaXRlcyB0byBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRob3V0IGhvbGRpbmcgdGhhdCB3cml0ZSBsb2NrPyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBhc3NpZ25tZW50cyBsaWtlIGB2bWEtXHUwMDNlYW5vbl92bWEgPWAgYW5kIHRoZW4gcmV2aWV3IHRoZSBjb250ZXh0IGFyb3VuZCB0aG9zZSB3cml0ZXMgdG8gdmVyaWZ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDU3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjAzLjEzNDE3NjE2NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyMTQ4MTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTE4NT1pbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTIxMS1cXHRpZiAobGlrZWx5KCF2bWEtXFx1MDAzZWFub25fdm1hKSkge1xcbm1tL3JtYXAuYzoyMTI6XFx0XFx0dm1hLVxcdTAwM2Vhbm9uX3ZtYSA9IGFub25fdm1hO1xcbm1tL3JtYXAuYy0yMTMtXFx0XFx0YW5vbl92bWFfY2hhaW5fYXNzaWduKHZtYSwgYXZjLCBhbm9uX3ZtYSk7XFxuLS1cXG5tbS9ybWFwLmM9Mzc4PWludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpXFxuLS1cXG5tbS9ybWFwLmMtMzg4LVxcdC8qIERyb3AgaW5oZXJpdGVkIGFub25fdm1hLCB3ZSdsbCByZXVzZSBleGlzdGluZyBvciBhbGxvY2F0ZSBuZXcuICovXFxubW0vcm1hcC5jOjM4OTpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtMzkwLVxcbi0tXFxubW0vcm1hcC5jLTQzMi1cXHQvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovXFxubW0vcm1hcC5jOjQzMzpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gYW5vbl92bWE7XFxubW0vcm1hcC5jLTQzNC1cXHRhbm9uX3ZtYV9jaGFpbl9hc3NpZ24odm1hLCBhdmMsIGFub25fdm1hKTtcXG4tLVxcbm1tL3JtYXAuYz00NTI9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00NjUtXFx0ICovXFxubW0vcm1hcC5jOjQ2NjpcXHR2bWEtXFx1MDAzZWFub25fdm1hID0gTlVMTDtcXG5tbS9ybWFwLmMtNDY3LX1cXG4tLVxcbm1tL3JtYXAuYz00Nzk9dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vcm1hcC5jLTUyMS1cXHQgKi9cXG5tbS9ybWFwLmM6NTIyOlxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBOVUxMO1xcbm1tL3JtYXAuYy01MjMtXFx0YW5vbl92bWFfdW5sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjAzLjU0NjMzMjQ1OFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxNzc4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmN1cnJlbmN5IENvbmNlcm5zIGluIEFub255bW91cyBWTSBBcmVhIFByZXBhcmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBJIHNlZSB0aGF0IGBfX2Fub25fdm1hX3ByZXBhcmVgIGdldHMgY2FsbGVkIGZyb20gYHZtZl9hbm9uX3ByZXBhcmVgLiBIbW0sIGludGVyZXN0aW5nLiBBbmQgYHZtZl9hbm9uX3ByZXBhcmVgLCBmcm9tIHdoYXQgSSByZW1lbWJlciwgZ2V0cyB0cmlnZ2VyZWQgZHVyaW5nIGEgcGFnZSBmYXVsdCwgcmlnaHQ/IFRoYXQncyB3aGVuIHRoZSBrZXJuZWwgaXMgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgcGh5c2ljYWwgcGFnZSBmb3IgYSB2aXJ0dWFsIGFkZHJlc3MuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmcg4oCTIGR1cmluZyBhIHBhZ2UgZmF1bHQsIHdlJ3JlIGhvbGRpbmcgdGhlIG1tYXAgUkVBRCBsb2NrLlxuXG4qV2FpdCBhIG1pbnV0ZSEqIElmIHRoZSBtbWFwIFJFQUQgbG9jayBpcyBoZWxkLCB0aGF0IG1lYW5zIG11bHRpcGxlIHRocmVhZHMgKmNvdWxkKiBwb3RlbnRpYWxseSBiZSBleGVjdXRpbmcgYF9fYW5vbl92bWFfcHJlcGFyZWAgY29uY3VycmVudGx5ISBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHJhY2UgY29uZGl0aW9ucyBpZiB3ZSBhcmUgbm90IGNhcmVmdWwsIGFuZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCdzIGFsbW9zdCBhbHdheXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBJIGhhZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hbm9uX3ZtYV9wcmVwYXJlYCB0byBtYWtlIHN1cmUgaXQncyB0aHJlYWQtc2FmZS4gVGltZSB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgaXQncyBoYW5kbGluZyBjb25jdXJyZW50IGFjY2VzcyBjb3JyZWN0bHksIGVzcGVjaWFsbHkgc2luY2UgaXQncyBvcGVyYXRpbmcgb24gYW5vbnltb3VzIG1lbW9yeSByZWdpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjMxNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjA4LjQ5ODExNDAxOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcm1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NSxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NTpcXHRpbnQgX19hbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAxODY6XFx0e1xcbiAxODc6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbiAxODg6XFx0XFx0c3RydWN0IGFub25fdm1hICphbm9uX3ZtYSwgKmFsbG9jYXRlZDtcXG4gMTg5OlxcdFxcdHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjO1xcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQobW0pO1xcbiAxOTI6XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0YXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7XFxuIDE5NTpcXHRcXHRpZiAoIWF2YylcXG4gMTk2OlxcdFxcdFxcdGdvdG8gb3V0X2Vub21lbTtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpO1xcbiAxOTk6XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjAwOlxcdFxcdGlmICghYW5vbl92bWEpIHtcXG4gMjAxOlxcdFxcdFxcdGFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTtcXG4gMjAyOlxcdFxcdFxcdGlmICh1bmxpa2VseSghYW5vbl92bWEpKVxcbiAyMDM6XFx0XFx0XFx0XFx0Z290byBvdXRfZW5vbWVtX2ZyZWVfYXZjO1xcbiAyMDQ6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9jaGlsZHJlbisrOyAvKiBzZWxmLXBhcmVudCBsaW5rIGZvciBuZXcgcm9vdCAqL1xcbiAyMDU6XFx0XFx0XFx0YWxsb2NhdGVkID0gYW5vbl92bWE7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYW5vbl92bWEpO1xcbiAyMDk6XFx0XFx0LyogcGFnZV90YWJsZV9sb2NrIHRvIHByb3RlY3QgYWdhaW5zdCB0aHJlYWRzICovXFxuIDIxMDpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiAyMTE6XFx0XFx0aWYgKGxpa2VseSghdm1hLVxcdTAwM2Vhbm9uX3ZtYSkpIHtcXG4gMjEyOlxcdFxcdFxcdHZtYS1cXHUwMDNlYW5vbl92bWEgPSBhbm9uX3ZtYTtcXG4gMjEzOlxcdFxcdFxcdGFub25fdm1hX2NoYWluX2Fzc2lnbih2bWEsIGF2YywgYW5vbl92bWEpO1xcbiAyMTQ6XFx0XFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbiAyMTU6XFx0XFx0XFx0YW5vbl92bWEtXFx1MDAzZW51bV9hY3RpdmVfdm1hcysrO1xcbiAyMTY6XFx0XFx0XFx0YWxsb2NhdGVkID0gTlVMTDtcXG4gMjE3OlxcdFxcdFxcdGF2YyA9IE5VTEw7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW0tXFx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjA4LjQ5ODI3ODQ5OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzYyNTYyODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbnVuZHJ1bSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmVgIGFuZCBDb25jdXJyZW5jeSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYF9fYW5vbl92bWFfcHJlcGFyZWAsIGFuZCB0aGUgY29kZSBtYWtlcyBtZSBwYXVzZS4gSXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyBgdm1hLVx1MDAzZWFub25fdm1hYCB3aGlsZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jay4gQW5kIGl0J3MgdXNpbmcgYHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spYCB0byBtYWtlIHN1cmUgb3RoZXIgdGhyZWFkcyBkb24ndCBtZXNzIHdpdGggYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGFub3RoZXIgdGhyZWFkIGhhbmRsaW5nIGEgcGFnZSBmYXVsdCAqY291bGQqIGJlIGNoYW5naW5nIGB2bWEtXHUwMDNlYW5vbl92bWFgIGF0IHRoZSBzYW1lIHRpbWUuIFRoYXQncyB3aGF0IHRoZSBsb2NraW5nIHN1Z2dlc3RzLlxuXG5CdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgYW5vbl92bWFfY2xvbmVgIGhhcyB0aGlzIGBtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQoc3JjLVx1MDAzZXZtX21tKWAgYXNzZXJ0aW9uLiBJdCAqcmVxdWlyZXMqIHRoZSBtbWFwIFdSSVRFIGxvY2suIElmIHRoYXQgbG9jayBpcyBoZWxkLCB0aGVuIGJ5IGRlZmluaXRpb24sICpubyogb3RoZXIgdGhyZWFkIGNhbiBiZSBob2xkaW5nIHRoZSBtbWFwIFJFQUQgbG9jayBzaW11bHRhbmVvdXNseS5cblxuVGhlcmVmb3JlLCBpZiBgYW5vbl92bWFfY2xvbmVgIGlzIGV4ZWN1dGluZywgaXQgc2VlbXMgaW1wb3NzaWJsZSBmb3IgYF9fYW5vbl92bWFfcHJlcGFyZWAgdG8gYmUgcnVubmluZyBjb25jdXJyZW50bHkhIEFuZCBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4ndCBiZSBtb2RpZmllZCBjb25jdXJyZW50bHkuIFRoZXNlIHR3byBzZWVtaW5nbHkgY29uZmxpY3Rpbmcgb2JzZXJ2YXRpb25zIGp1c3QgZG9uJ3QgYWRkIHVwIVxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzbid0IHNvbWUgZWRnZSBjYXNlLCBvciBzb21lIG90aGVyIGNvZGUgcGF0aCwgd2hlcmUgYGFub25fdm1hX2Nsb25lYCBnZXRzIGNhbGxlZCAqd2l0aG91dCogdGhlIHdyaXRlIGxvY2sgaGVsZC4gTWF5YmUgc29tZXRoaW5nIGluIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgY2FuIHJlc29sdmUgdGhpcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMyNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjoxNC4yNjA4NDUwNTJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzU6XFx0c3RhdGljIHZvaWQgY2hlY2tfYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsXFxuIDIzNjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuIDIzNzpcXHRcXHRcXHRcXHRcXHQgZW51bSB2bWFfb3BlcmF0aW9uIG9wZXJhdGlvbilcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdC8qIFRoZSB3cml0ZSBsb2NrIG11c3QgYmUgaGVsZC4gKi9cXG4gMjQwOlxcdFxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChzcmMtXFx1MDAzZXZtX21tKTtcXG4gMjQxOlxcdFxcdC8qIElmIG5vdCBhIGZvcmsgdGhlbiBtdXN0IGJlIG9uIHNhbWUgbW0uICovXFxuIDI0MjpcXHRcXHRWTV9XQVJOX09OX09OQ0Uob3BlcmF0aW9uICE9IFZNQV9PUF9GT1JLIFxcdTAwMjZcXHUwMDI2IGRzdC1cXHUwMDNldm1fbW0gIT0gc3JjLVxcdTAwM2V2bV9tbSk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdC8qIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gZG8gc3JjLVxcdTAwM2Vhbm9uX3ZtYSBtdXN0IGJlIHByb3ZpZGVkLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjoxNC4yNjEwMjEwNzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgzMzgzMjY4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYW5vbl92bWFgIExvY2tpbmcgaW4gYGR1cF9hbm9uX3ZtYWAgYW5kIGBhbm9uX3ZtYV9jbG9uZWAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gdmVyaWZ5aW5nIHRoYXQgYG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChzcmMtXHUwMDNldm1fbW0pO2AgaXMgaW5kZWVkIHByZXNlbnQsIHNvIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiB0aGUgc291cmNlIFZNQSdzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYHNyYy1cdTAwM2V2bV9tbWApLiBUaGlzIGlzIGtleS4gSXQgbWVhbnMgdGhhdCwgaW4gcHJpbmNpcGxlLCBgc3JjLVx1MDAzZWFub25fdm1hYCBzaG91bGQgKm5vdCogYmUgY29uY3VycmVudGx5IG1vZGlmaWVkLiBcblxuVGhlIHF1ZXN0aW9uIGlzLCB3aHkgd2FzIHRoZXJlIGEgY2hhbmdlIGZyb20gbG9ja2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCBkaXJlY3RseSB0byB1c2luZyBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgYXMgYHNyYy1cdTAwM2Vhbm9uX3ZtYWA/IElmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGNhbid0IGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseSwgdGhlbiB1c2luZyBgYWN0aXZlX2Fub25fdm1hYCBzaG91bGQgYmUgc2VtYW50aWNhbGx5IGlkZW50aWNhbC5cblxuTXkgbGluZSBvZiByZWFzb25pbmcgaXMsICppZiogYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgY2hhbmdpbmcgYmV0d2VlbiB3aGVuIGl0J3MgcmVhZCB0byBpbml0aWFsaXplIGBhY3RpdmVfYW5vbl92bWFgIGFuZCB3aGVuIGBhbm9uX3ZtYV9sb2NrX3dyaXRlYCBpcyBjYWxsZWQsIHRoZW4gdGhlcmUncyBubyBwcm9ibGVtLiBJJ20gbWVudGFsbHkgd2Fsa2luZyB0aHJvdWdoIHBvdGVudGlhbCBtb2RpZmljYXRpb25zLiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYCBvcGVyYXRlcyBvbiB0aGUgZGVzdGluYXRpb24ncyBjaGFpbi4gYGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0YCBkb2Vzbid0IG1vZGlmeSB0aGUgc291cmNlJ3MgYGFub25fdm1hYC4gVGhlIHNhbWUgZ29lcyBmb3IgYG1heWJlX3JldXNlX2Fub25fdm1hYC5cblxuVGhlbiwgSSBicmllZmx5IGNvbnNpZGVyZWQgYW4gYWxpYXMgc2l0dWF0aW9uOyBpZiBgc3JjYCBhbmQgYGRzdGAgd2VyZSB0aGUgc2FtZSwgYW5kIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgKmRpZCogcG90ZW50aWFsbHkgbW9kaWZ5IGBkc3QtXHUwMDNlYW5vbl92bWFgLCB0aGVuIGl0IHdvdWxkIGJlIGEgcHJvYmxlbS4gQnV0IEknbSBxdWlja2x5IGRpc21pc3NpbmcgdGhpcyBzaW5jZSBpdCdzIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCBgc3JjYCBhbmQgYGRzdGAgYXJlICphbHdheXMqIGRpZmZlcmVudC4gQWxzbywgSSdtIGNoZWNraW5nIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm90IGEgbWFjcm8gYW5kIGlzIGEgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgLlxuXG5UaGVuLCBJIGJyaWVmbHkgY29uc2lkZXIgYSBjb21waWxlciBpc3N1ZTsgSSdtIGVsaW1pbmF0aW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBhIGRhdGEgcmFjZSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWFkIHR3aWNlIGFuZCB0aGUgY29tcGlsZXIgcmVsb2FkcyB0aGUgdmFsdWUuIEtDU0FOIHdvdWxkbid0IGZsYWcgYSByYWNlIGlmIG5vIGNvbmN1cnJlbnQgd3JpdGVyIGV4aXN0cy4gU2luY2UgdGhlIHdyaXRlIGxvY2sgaXMgaGVsZCwgdGhlcmUncyBubyBjb25jdXJyZW50IHdyaXRlci4gU28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjYXNlIHdoZXJlIGBzcmNgIGlzIGluIGEgZGlmZmVyZW50IG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkuIFRoZW4sIHRoZSBhbmFseXNpcyBpcyBhYm91dCBgYW5vbl92bWFfZm9ya2AgYW5kIHdoZXRoZXIgYSBwYXJlbnQncyBWTUEgY291bGQgYmUgbW9kaWZpZWQgYnkgYSBjaGlsZC4gVGhpcyBpcyBhbHNvIGltcG9zc2libGUgYmVjYXVzZSBvZiB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIHRoZSBwYXJlbnQncyBgbW1gLlxuXG5UaGVuLCBJJ20gY2hlY2tpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBgYW5vbl92bWFfbG9ja193cml0ZWAgYW5kIGBhbm9uX3ZtYV91bmxvY2tfd3JpdGVgLiBJIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgb25seSB0YWtlIHRoZSBwb2ludGVyIHRvIGBzdHJ1Y3QgYW5vbl92bWFgIGFuZCBkb24ndCBtb2RpZnkgdGhlIHBvaW50ZXIgaXRzZWxmLiBUaGVyZWZvcmUsIHRoZXkgY2FuJ3QgY2hhbmdlIHdoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgKnBvaW50cyB0byouXG5cbk9rYXksIHNvIEkgd2VudCBiYWNrIHRvIHRoZSBwYXRjaCBhbmQgSSByZWFsaXplZCB0aGVyZSdzIGEgcHJvYmxlbTogdGhlICpvcmlnaW5hbCogY29kZSBsb2NrZWQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYW5kIHVubG9ja2VkIGBhY3RpdmVfYW5vbl92bWFgLiBUaGUgcmVmYWN0b3JpbmcgaW5pdGlhbGl6ZXMgYGFjdGl2ZV9hbm9uX3ZtYWAgZnJvbSBgc3JjLVx1MDAzZWFub25fdm1hYC4gTm93IGl0ICpzaG91bGRuJ3QgbWF0dGVyKiBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyAqZGlmZmVyZW50KiBmcm9tIGBhY3RpdmVfYW5vbl92bWFgLiBCdXQgaG93IGNvdWxkIHRoZXkgYmUgZGlmZmVyZW50PyBJJ20gcmVjaGVja2luZyB0aGUgY29kZSBpbiBgZHVwX2Fub25fdm1hYC5cblxuYGR1cF9hbm9uX3ZtYWAgc2V0cyBgZHN0LVx1MDAzZWFub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hYCBhbmQgdGhlbiBjYWxscyBgYW5vbl92bWFfY2xvbmVgLiAqSW5zaWRlKiBgYW5vbl92bWFfY2xvbmVgLCB0aGUgY29kZSB0aGVuIGdldHMgYSBsb2NhbCBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgICh3aGljaCBpcyBgZHN0LVx1MDAzZWFub25fdm1hYCkuIFRoZW4gdGhlIGNvZGUgY2FsbHMgYGFub25fdm1hX2Nsb25lYCB3aGljaCAqZG9lcyogYSBjYWxsIHRvIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSlgIC0gd2hpY2ggaXMgZXF1aXZhbGVudCB0byBgZHN0LVx1MDAzZWFub25fdm1hYCBpZiBgc3JjID09IGRzdGAuIEluc2lkZSB0aGlzIGZ1bmN0aW9uIHRoZXJlJ3MgYWxzbyB0aGUgbGluZSBgZHN0LVx1MDAzZWFub25fdm1hLVx1MDAzZW51bV9hY3RpdmVfdm1hcysrYCB3aGljaCAqZG9lcyogbW9kaWZ5IGBkc3QtXHUwMDNlYW5vbl92bWFgLiBTbyB0aGlzIG1lYW5zIHRoYXQgaWYgYHNyY2AgaXMgYW4gYWxpYXMgZm9yIGBkc3RgLCB0aGVuIGBzcmMtXHUwMDNlYW5vbl92bWFgIGdldHMgbW9kaWZpZWQuXG5cbkJ1dCBJIGtlZXAgdGhpbmtpbmcgdGhhdCBJIGVzdGFibGlzaGVkIGVhcmxpZXIgdGhhdCB0aGV5IGFyZSAqYWx3YXlzKiBkaWZmZXJlbnQuLi4gVW5sZXNzLi4uICp1bmxlc3MqIHRoZSBzYW1lIFZNQSBpcyBwYXNzZWQgdG8gYGFub25fdm1hX2Nsb25lYCBhcyBib3RoIGBzcmNgXG5cbiIsIklucHV0VG9rZW5zIjozNDEwMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MjozMi41OTkzNTExNjZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTk3NzAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9jbG9uZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTI1MT1lbnVtIHZtYV9vcGVyYXRpb24ge1xcbi0tXFxubW0vaW50ZXJuYWwuaC0yNTctXFxubW0vaW50ZXJuYWwuaDoyNTg6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9pbnRlcm5hbC5oLTI1OS1cXHRlbnVtIHZtYV9vcGVyYXRpb24gb3BlcmF0aW9uKTtcXG4tLVxcbm1tL3JtYXAuYz0xODU9aW50IF9fYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy0yMzQtXFxubW0vcm1hcC5jOjIzNTpzdGF0aWMgdm9pZCBjaGVja19hbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCxcXG5tbS9ybWFwLmMtMjM2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG4tLVxcbm1tL3JtYXAuYz0yOTA9c3RhdGljIHZvaWQgY2xlYW51cF9wYXJ0aWFsX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5tbS9ybWFwLmMtMzE5LSAqL1xcbm1tL3JtYXAuYzozMjA6aW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyYyxcXG5tbS9ybWFwLmMtMzIxLVxcdFxcdCAgIGVudW0gdm1hX29wZXJhdGlvbiBvcGVyYXRpb24pXFxuLS1cXG5tbS9ybWFwLmMtMzI1LVxcbm1tL3JtYXAuYzozMjY6XFx0Y2hlY2tfYW5vbl92bWFfY2xvbmUoZHN0LCBzcmMsIG9wZXJhdGlvbik7XFxubW0vcm1hcC5jLTMyNy1cXG4tLVxcbm1tL3JtYXAuYz0zNzg9aW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSlcXG4tLVxcbm1tL3JtYXAuYy00MDMtXFx0ICovXFxubW0vcm1hcC5jOjQwNDpcXHRyYyA9IGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSwgVk1BX09QX0ZPUkspO1xcbm1tL3JtYXAuYy00MDUtXFx0LyogQW4gZXJyb3IgYXJvc2Ugb3IgYW4gZXhpc3RpbmcgYW5vbl92bWEgd2FzIHJldXNlZCwgYWxsIGRvbmUgdGhlbi4gKi9cXG4tLVxcbm1tL3JtYXAuYy00NDQtLypcXG5tbS9ybWFwLmM6NDQ1OiAqIEluIHRoZSB1bmZvcnR1bmF0ZSBjYXNlIG9mIGFub25fdm1hX2Nsb25lKCkgZmFpbGluZyB0byBhbGxvY2F0ZSBtZW1vcnkgd2VcXG5tbS9ybWFwLmMtNDQ2LSAqIGhhdmUgdG8gY2xlYW4gdGhpbmdzIHVwLlxcbi0tXFxubW0vdm1hLmM9NTAwPV9fc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bWEuYy01MzUtXFxubW0vdm1hLmM6NTM2OlxcdGVyciA9IGFub25fdm1hX2Nsb25lKG5ldywgdm1hLCBWTUFfT1BfU1BMSVQpO1xcbm1tL3ZtYS5jLTUzNy1cXHRpZiAoZXJyKVxcbi0tXFxubW0vdm1hLmM9NjEyPXN0YXRpYyBpbnQgZHVwX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0LFxcbi0tXFxubW0vdm1hLmMtNjMzLVxcdFxcdGRzdC1cXHUwMDNlYW5vbl92bWEgPSBzcmMtXFx1MDAzZWFub25fdm1hO1xcbm1tL3ZtYS5jOjYzNDpcXHRcXHRyZXQgPSBhbm9uX3ZtYV9jbG9uZShkc3QsIHNyYywgVk1BX09QX01FUkdFX1VORkFVTFRFRCk7XFxubW0vdm1hLmMtNjM1LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5tbS92bWEuYz0xODY0PXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqY29weV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcCxcXG4tLVxcbm1tL3ZtYS5jLTE5MjktXFx0XFx0XFx0Z290byBvdXRfZnJlZV92bWE7XFxubW0vdm1hLmM6MTkzMDpcXHRcXHRpZiAoYW5vbl92bWFfY2xvbmUobmV3X3ZtYSwgdm1hLCBWTUFfT1BfUkVNQVApKVxcbm1tL3ZtYS5jLTE5MzEtXFx0XFx0XFx0Z290byBvdXRfZnJlZV9tZW1wb2w7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjMzLjU0MTMzMjI5NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc2NzE1NTMyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWVwIERpdmUgaW50byBgYW5vbl92bWFgIExvY2tpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3Mgd2FzIHN0cmFpZ2h0Zm9yd2FyZDogaW4gc2V2ZXJhbCBrZXkgYHZtYWAgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyDigJMgYGFub25fdm1hX2ZvcmtgLCBgX19zcGxpdF92bWFgLCBgZHVwX2Fub25fdm1hYCwgYW5kIGBjb3B5X3ZtYWAg4oCTIGl0J3MgY2xlYXIgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBWTUFzIChgc3JjYCBhbmQgYGRzdGAsIG9yIGVxdWl2YWxlbnQpIGFyZSBhbHdheXMgZGlzdGluY3QuIFRoZXJlZm9yZSwgdGhlIHNvdXJjZSdzIGBhbm9uX3ZtYWAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHRoZSBjbG9uaW5nIHByb2Nlc3MsIG5vciBpcyB0aGUgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXNgIG1vZGlmaWVkIGJ5IGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAgd2hpY2ggc2hvdWxkIHJ1bGUgb3V0IGRhdGEgcmFjZXMuXG5cbkhvd2V2ZXIsIEkgcGF1c2VkLCBjb25zaWRlcmluZyB0aGUgcm9sZSBvZiBgYW5vbl92bWFfY2hhaW5fYXNzaWduYC4gSSByZW1lbWJlcmVkIHRoYXQgaXQgbW9kaWZpZXMgdGhlIGBhbm9uX3ZtYV9jaGFpbmAsIGJ1dCBjcml0aWNhbGx5LCBpdCBkb2Vzbid0IGRpcmVjdGx5IGFsdGVyIHRoZSBgdm1hLVx1MDAzZWFub25fdm1hYCBwb2ludGVyIGl0c2VsZi4gU28sIHRoYXQgYXZlbnVlIHdhcyBhIGRlYWQgZW5kLlxuXG5NeSBoeXBvdGhlc2lzIHdhcyB0aGF0IEkgY291bGQgcmVtb3ZlIHRoZSBjYWxsIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKHNyYy1cdTAwM2Vhbm9uX3ZtYSk7YCBiZWNhdXNlIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgIGJ1dCBJIG5lZWRlZCB0byBmaW5kIG91dCB3aHkuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzIHRoYXQgdGhpcyBtdXN0IGJlIGEgY29zbWV0aWMgY2hhbmdlIHRvIG1ha2UgdGhlIGNvZGUgY2xlYW5lciwgYnV0IHRoYXQgZGlkIG5vdCBmZWVsIHJpZ2h0LiBDb3VsZCB0aGUgY2hhbmdlIGJlIG1lYW50IHRvIGVsaW1pbmF0ZSBhIGNvbXBpbGVyIHdhcm5pbmcgb3IgYSBLQ1NBTiBmYWxzZSBwb3NpdGl2ZT8gU2luY2UgS0NTQU4gbmVlZHMgYSB3cml0ZSB0byBkZXRlY3QgYSBkYXRhIHJhY2UsIHRoaXMgc2VlbWVkIHVubGlrZWx5LlxuXG5JIHRoZW4gY29uc2lkZXJlZCBwYWdlIGZhdWx0cyBoYW5kbGVkIGJ5IHRoZSBwZXItVk1BIGxvY2sgYW5kIGB2bWZfYW5vbl9wcmVwYXJlYC4gSSByZWFsaXplZCB0aGF0IGB2bWZfYW5vbl9wcmVwYXJlYCAqcmVhZHMqIGB2bWEtXHUwMDNlYW5vbl92bWFgIHdpdGhvdXQgdGhlIG1tYXAgbG9jay4gVGhpcyBpcyBhIGNvbmN1cnJlbnQgUkVBRCwgd2hpY2ggaXMgbm90IGEgcHJvYmxlbS5cblxuVGhlIGtleSB0aGVuIGJlY2FtZSB0aGUgcG9zc2liaWxpdHkgdGhhdCBgc3JjLVx1MDAzZWFub25fdm1hYCB3YXMgYmVpbmcgKndyaXR0ZW4qIHRvIGJ5IGFub3RoZXIgdGhyZWFkLiAgSSBxdWlja2x5IGRpc21pc3NlZCB0aGlzLiBJJ20gaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrIGluIG1vc3Qgb2YgdGhlc2Ugc2NlbmFyaW9zLiBUaGUgcGVyLVZNQSBsb2NrIHdvdWxkbid0IHdvcmsgYXMgYHZtZl9hbm9uX3ByZXBhcmVgIG5lZWRzIGEgbW1hcCByZWFkIGxvY2sgcHJpb3IgdG8gY2FsbGluZyBgX19hbm9uX3ZtYV9wcmVwYXJlYCwgc28gYWdhaW4sIG5vIGNvbmN1cnJlbnQgd3JpdGVzLlxuXG5JIHRoZW4gY29uc2lkZXJlZCBvdGhlciB0aHJlYWRzIGNvdWxkIGNoYW5nZSBgc3JjLVx1MDAzZWFub25fdm1hYCwgYnV0IHdhcyBub3QgYWJsZSB0byB0aGluayBvZiBhbnkgb3RoZXIgY29kZSBwYXRocy5cblxuSSB3YXMgc3R1bXBlZCwgdGhlbiBpdCBkYXduZWQgb24gbWUgdG8gc2VhcmNoIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UuIEkgYW0gbm93IGxvb2tpbmcgZm9yIGBhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7YCBpbiB0aGUga2VybmVsIGxvZ3MgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc2OTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjQ3LjMwODQ5NDcxOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMjg1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl92bWFfbG9ja193cml0ZVxcXFwoYWN0aXZlX2Fub25fdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ybWFwLmM9MzIwPWludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMsXFxuLS1cXG5tbS9ybWFwLmMtMzUyLVxcdCAqL1xcbm1tL3JtYXAuYzozNTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy0zNTQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGF2YywgXFx1MDAyNmRzdC1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuLS1cXG5tbS9ybWFwLmM9NDc5PXZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL3JtYXAuYy00OTItXFxubW0vcm1hcC5jOjQ5MzpcXHRhbm9uX3ZtYV9sb2NrX3dyaXRlKGFjdGl2ZV9hbm9uX3ZtYSk7XFxubW0vcm1hcC5jLTQ5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTI6NDcuMzY0NzI1NzU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTkzNTEzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEFub255bW91cyBWTUEgVW5saW5raW5nKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIGp1c3QgdHJhY2luZyB0aHJvdWdoIHNvbWUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSB1bmxpbmtpbmcgb2YgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWFzIChWTUFzKS4gSSBqdXN0IHNhdyBgYW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO2AgaW4gYHVubGlua19hbm9uX3ZtYXNgLiBUaGlzIHNlZW1zIGludGVyZXN0aW5nIGJlY2F1c2UgSSBrbm93IHdlIGhhdmUgd3JpdGUgbG9ja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdyaXRlIGxvY2sgaXMgaW4gYHVubGlua19hbm9uX3ZtYXNgLCB3aGljaCBpcyBhYm91dCB1bmxpbmtpbmcsIG5vdCB3cml0aW5nLiBTbywgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGB1bmxpbmtfYW5vbl92bWFzYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZXNlIGxvY2tzIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdW5saW5raW5nIGFuZCB3cml0ZSBhY2Nlc3Mgb24gYWN0aXZlIGFub255bW91cyBWTUFzLiBMZXQncyBzdGFydCB3aXRoIGB1bmxpbmtfYW5vbl92bWFzYC4gSSdsbCB3YW50IHRvIHNlZSBob3cgdGhlc2UgbG9ja3MgYXJlIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIFZNQSBzdHJ1Y3R1cmVzIGFuZCB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIHRlYXJpbmcgZG93biB0aGUgbWVtb3J5IG1hcHBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NjMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTI6NTIuNDY0MDgwNTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3JtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0Nzk6XFx0dm9pZCB1bmxpbmtfYW5vbl92bWFzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiA0ODA6XFx0e1xcbiA0ODE6XFx0XFx0c3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpuZXh0O1xcbiA0ODI6XFx0XFx0c3RydWN0IGFub25fdm1hICphY3RpdmVfYW5vbl92bWEgPSB2bWEtXFx1MDAzZWFub25fdm1hO1xcbiA0ODM6XFx0XFxuIDQ4NDpcXHRcXHQvKiBBbHdheXMgaG9sZCBtbWFwIGxvY2ssIHJlYWQtbG9jayBvbiB1bm1hcCBwb3NzaWJseS4gKi9cXG4gNDg1OlxcdFxcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXFx1MDAzZXZtX21tKTtcXG4gNDg2OlxcdFxcbiA0ODc6XFx0XFx0LyogVW5mYXVsdGVkIGlzIGEgbm8tb3AuICovXFxuIDQ4ODpcXHRcXHRpZiAoIWFjdGl2ZV9hbm9uX3ZtYSkge1xcbiA0ODk6XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZ2bWEtXFx1MDAzZWFub25fdm1hX2NoYWluKSk7XFxuIDQ5MDpcXHRcXHRcXHRyZXR1cm47XFxuIDQ5MTpcXHRcXHR9XFxuIDQ5MjpcXHRcXG4gNDkzOlxcdFxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0LypcXG4gNDk2OlxcdFxcdCAqIFVubGluayBlYWNoIGFub25fdm1hIGNoYWluZWQgdG8gdGhlIFZNQS4gIFRoaXMgbGlzdCBpcyBvcmRlcmVkXFxuIDQ5NzpcXHRcXHQgKiBmcm9tIG5ld2VzdCB0byBvbGRlc3QsIGVuc3VyaW5nIHRoZSByb290IGFub25fdm1hIGdldHMgZnJlZWQgbGFzdC5cXG4gNDk4OlxcdFxcdCAqL1xcbiA0OTk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF2YywgbmV4dCwgXFx1MDAyNnZtYS1cXHUwMDNlYW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7XFxuIDUwMDpcXHRcXHRcXHRzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLVxcdTAwM2Vhbm9uX3ZtYTtcXG4gNTAxOlxcdFxcbiA1MDI6XFx0XFx0XFx0YW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9yZW1vdmUoYXZjLCBcXHUwMDI2YW5vbl92bWEtXFx1MDAzZXJiX3Jvb3QpO1xcbiA1MDM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUyOjUyLjQ2NDIzMDk5WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxODU3MzQ3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlZXAgRGl2ZSBpbnRvIGEgS2VybmVsIFBhdGNoOiBBbm9uX3ZtYSBMb2NrIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgcGF0Y2ggdGhhdCBzZWVtcyB0byBiZSBjaGFuZ2luZyBob3cgd2UgaGFuZGxlIGBhbm9uX3ZtYWAgbG9ja3MgaW4gYGFub25fdm1hX2Nsb25lYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGV5J3JlIHJlcGxhY2luZyBgc3JjLVx1MDAzZWFub25fdm1hYCB3aXRoIGBhY3RpdmVfYW5vbl92bWFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBhcmUgdGhleSAqcmVhbGx5KiB0aGUgc2FtZT8gSXMgdGhpcyBqdXN0IGEgY2xlYW51cCwgb3IgaXMgdGhlcmUgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gZml4IGhlcmU/XCIgSSdtIHNrZXB0aWNhbCwgc28gSSBuZWVkIHRvIGdvIHRocm91Z2ggZXZlcnl0aGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byBjaGVjayBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBjb3VsZCBzb21laG93IGJlIG1vZGlmaWVkIGFmdGVyIGl0J3MgcmVhZCBidXQgYmVmb3JlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBMb29raW5nIGF0IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBpdCBzZWVtcyB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGNhbiBjaGFuZ2UgdmlhIGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBidXQgb25seSBpZiBgc3JjYCBpcyB0aGUgc2FtZSBhcyBgZHN0YC4gQnV0IHRoYXQncyBpbXBvc3NpYmxlIHdpdGhpbiB0aGlzIGZ1bmN0aW9uJ3MgbG9naWMuIFNvIHRoYXQncyBub3QgYSB0aGluZy4gYGFub25fdm1hX2NoYWluX2FsbG9jYCBkb2Vzbid0IG1vZGlmeSBpdCBlaXRoZXIuIGBjaGVja19hbm9uX3ZtYV9jbG9uZWAgaXNuJ3QgZG9pbmcgYW55dGhpbmcsIGp1c3QgYSB3YXJuaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW5vdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYC4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkLiBIb3dldmVyLCB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyB0byBnZXQgaW50byB0aGlzIHNpdHVhdGlvbiBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlbS4gQW5vdGhlciB0aHJlYWQgY2FuJ3QgbW9kaWZ5IGl0IGlmIHdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYC4gU28sIGEgcGFnZSBmYXVsdCBpbiB0aGUgcGFyZW50LCBhIHBhZ2UgZmF1bHQgaW4gdGhlIGNoaWxkLCBhbmQgZXZlbiBwYWdlIGZhdWx0cyBpbiBhIGRpZmZlcmVudCBwcm9jZXNzIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGBhbm9uX3ZtYWAsIGNhbid0IG1vZGlmeSBgc3JjLVx1MDAzZWFub25fdm1hYC4gYHVubGlua19hbm9uX3ZtYXNgLCBgYW5vbl92bWFfY2xvbmVgLCBhbmQgYG1heWJlX3JldXNlX2Fub25fdm1hYCBpbiBhIHNpYmxpbmcgcHJvY2VzcyBjYW4ndCBtb2RpZnkgaXQgZWl0aGVyLiBTbywgaXQgYXBwZWFycyB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzICpvbmx5KiBtb2RpZmllZCB3aGVuIGBzcmNgIGl0c2VsZiBpcyBiZWluZyBtb2RpZmllZCwgYW5kIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2Vzcy5cblxuVGhlcmVmb3JlLCB0aGlzIGFwcGVhcnMgdG8gYmUgcHVyZWx5IGEgY29zbWV0aWMgY2hhbmdlLCBhIGNsZWFudXAuXG5cbkJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlLiBJIG11c3QgYXNrIG15c2VsZiwgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gRG9lcyB0aGUgZmFjdCB0aGF0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGJlaW5nIGEgcG9pbnRlciBtYXR0ZXI/XG5cbkNvdWxkIGl0IGJlIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgYmVpbmcgZXZhbHVhdGVkIGFzIGEgbWFjcm8gd2l0aCBzaWRlIGVmZmVjdHM/IE5vLCBgc3JjYCBpcyBgc3RydWN0IHZtX2FyZWFfc3RydWN0YC4gT2theSwgdGhhdCdzIG5vdCBhIHRoaW5nLlxuXG5Db3VsZCB0aGVyZSBiZSBhIGRhdGEgcmFjZSB0aGF0IEtDU0FOIHdvdWxkIGNvbXBsYWluIGFib3V0PyBObywgd2UgaG9sZCB0aGUgbW1hcCB3cml0ZSBsb2NrLlxuXG5JcyBpdCBwb3NzaWJsZSB0aGF0IGBzcmNgIGlzIGJlaW5nIG1lcmdlZCBvciBzcGxpdD8gTm8sIHdlIGhhdmUgdGhlIG1tYXAgd3JpdGUgbG9jay5cblxuSSBqdXN0IG5lZWQgdG8gYmUgc3VwZXIgc3VyZS4gQWghIFdhaXQgYSBtaW51dGUsIHdoYXQgaWYgYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQgZnJvbSBgZHVwX2Fub25fdm1hYD8gSSBuZWVkIHRvIGNoZWNrIHRoaXMgcGF0aC4gTG9va3MgbGlrZSB3ZSAqZG8qIHNldCBgZHN0LVx1MDAzZWFub25fdm1hID0gc3JjLVx1MDAzZWFub25fdm1hYCBiZWZvcmUgY2FsbGluZyBgYW5vbl92bWFfY2xvbmVgLiBCdXQgZXZlbiBoZXJlLCB3ZSBzdGlsbCBob2xkIHRoZSBtbWFwIHdyaXRlIGxvY2suIFRoaXMgc3RpbGwgc2VlbXMgc2FmZS5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGV4aGF1c3RlZCBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuIFRoaXMgcmVhbGx5IHNlZW1zIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgYSBjbGVhbnVwLiBUaW1lIHRvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBpbiB0aGUga2VybmVsIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6MTQuMzIxNTgwODEzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY4MDYzNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFub25fdm1hX2xvY2tfd3JpdGVcXFxcKGFjdGl2ZV9hbm9uX3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTMyMD1pbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vcm1hcC5jLTM1Mi1cXHQgKi9cXG5tbS9ybWFwLmM6MzUzOlxcdGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKTtcXG5tbS9ybWFwLmMtMzU0LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdmMsIFxcdTAwMjZkc3QtXFx1MDAzZWFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkge1xcbi0tXFxubW0vcm1hcC5jPTQ3OT12b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9ybWFwLmMtNDkyLVxcbm1tL3JtYXAuYzo0OTM6XFx0YW5vbl92bWFfbG9ja193cml0ZShhY3RpdmVfYW5vbl92bWEpO1xcbm1tL3JtYXAuYy00OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjE2Ljk4OTY0OTQ2M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ5MDg2NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRXVyZWthISBBIEdpdCBTb2x1dGlvbiEqKlxuXG5SaWdodCwgSSB3YXMgc3R1Y2sgZm9yIGEgbW9tZW50IHRoZXJlLCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdG8gZmluZCB0aGF0IHNwZWNpZmljIGNvbW1pdC4uLiBJIHdhcyBwcm9iYWJseSBvdmVydGhpbmtpbmcgaXQuIEluc3RlYWQgb2Ygc29tZSBjb21wbGV4IHNjcmlwdCBvciBkaWdnaW5nIHRocm91Z2ggdGhlIHdlYiwgd2h5IGRpZG4ndCBJIGp1c3QuLi4gd2FpdCBhIG1pbnV0ZS4uLiAqZ2l0IGxvZyohIE9mIGNvdXJzZS4gSSBjYW4gYWJzb2x1dGVseSB1c2UgYGdpdCBsb2dgIHRvIHNlYXJjaCBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGtleS4gVGhhdCdzIGdvaW5nIHRvIHNhdmUgbWUgYSB0b24gb2YgdGltZS4gU2ltcGxlLCBlZmZlY3RpdmUsIGVsZWdhbnQuIExldCdzIGZpcmUgdGhhdCB1cCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDM1OTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MzoyMC44Mzg3Mzg3NDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM0NjU2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3ZtYV9sb2NrX3dyaXRlXFxcXChhY3RpdmVfYW5vbl92bWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiLmdpdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6MjAuODg4Njc5NjIyWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDU0NTQ4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEZpbmRpbmcgdGhlIFJlbGV2YW50IENvbW1pdCoqXG5cbk9rYXksIHNvIGBncmVwcGVyYCBpcyBvbmx5IGdvaW5nIHRvIGhlbHAgbWUgd2l0aGluIG15IGN1cnJlbnQgd29ya2luZyB0cmVlLCBub3QgZGl2ZSBpbnRvIHRoZSBHaXQgaGlzdG9yeS4gVGhhdCdzIGEgYml0IG9mIGEgc2V0YmFjay4gQnV0LCBJIGNhbiB1c2UgYGdpdCBsb2cgLXBgIGFuZCB0aGVuIGBncmVwYCBhcm91bmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGwgYGFub25fdm1hX2xvY2tfd3JpdGUoYWN0aXZlX2Fub25fdm1hKWAgdG8gc2VhcmNoIHRoZSBwYXRjaGVzIGluIHRoZSBnaXQgaGlzdG9yeS4gXG5cbkhtbSwgd2FpdC4gSSBkb24ndCBoYXZlIGEgc3BlY2lmaWMgdG9vbCB0byBleGVjdXRlIGFyYml0cmFyeSBzaGVsbCBjb21tYW5kcyByZWFkaWx5IGF2YWlsYWJsZS4gSSBjb3VsZCB0cnkgdG8gbG9vayBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGhpbiB0aGUga2VybmVsIHRyZWUgaWYgaXQncyByZWNlbnQuIFxuXG5IYW5nIG9uLi4uIEkgdGhpbmsgdGhlIGNvbW1pdCBJIG5lZWQgaXMgYWN0dWFsbHkgdGhlIEhFQUQgY29tbWl0ICppbiBteSBjdXJyZW50IHdvcmtzcGFjZSohIFRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHRoYXQncyB0aGUgY2FzZSwgSSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGxvb2sgYXQgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZSBjdXJyZW50IEhFQUQuIE5vdywgaG93IGRvIEkgZG8gdGhhdCB3aXRob3V0IGV4dGVybmFsIHRvb2xzPyBDb3VsZCBJIHVzZSBgZ3JlcHBlcmA/IE5vLCBpdCdzIHRpZWQgdG8gdGhlIHdvcmtpbmcgdHJlZS4gV2FpdCwgbWF5YmUgSSBjYW4gcmVhZCBgLmdpdC9DT01NSVRfRURJVE1TR2A/IE5vLCB0aGF0J3Mgd2hhdCdzIGJlaW5nIHdyaXR0ZW4gKmJlZm9yZSogY29tbWl0dGluZy4gXG5cbkFoYSEgTWF5YmUgYC5naXQvbG9ncy9IRUFEYCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gSSdtIGFmdGVyLiBJJ20gZ29pbmcgdG8gdHJ5IHJlYWRpbmcgdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzc4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1MzoyNy4wOTQxMzcwNzNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiLmdpdC9sb2dzL0hFQURcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGY1ZjkzMjdlMjUxYTRlZmI5YTk4Nzc0MDkzZWY0Njc1YTRiMTcwYjkgc3l6a2FsbGVyIFxcdTAwM2NzeXprYWxsZXJAc2VyaWVzLXdvcmtmbG93eGhiNWYtdHJpYWdlLWFjdGlvbi0yNDQ3ODYwODM4Lihub25lKVxcdTAwM2UgMTc4Njk0MjE2NiArMDAwMFxcdHJlc2V0OiBtb3ZpbmcgdG8gZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOVxcbiAgIDI6XFx0ZjVmOTMyN2UyNTFhNGVmYjlhOTg3NzQwOTNlZjQ2NzVhNGIxNzBiOSA4NzBmNDY0ZWVjMGRlZjY0MDExOWM2YjNhNWY2ODQ3ZTY4YTA5ZDljIHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2UgMTc4Njk0MjE3MSArMDAwMFxcdGNvbW1pdDogc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjI3LjA5NDIwNjA0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI5MjE5MDExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb3NtZXRpYyBBbm9uX1ZNQSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbW1pdCB3aXRoIGEgcHJldHR5IGdlbmVyaWMgbWVzc2FnZS4gTm8gYXV0aG9yLCBubyBvcmlnaW5hbCBkZXNjcmlwdGlvbiDigJMgZ290dGEgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gZnJvbSBzY3JhdGNoLiBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyxcIiBncmVhdC4gTGV0J3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIG1vZGlmaWVzIGBzcmMtXHUwMDNlYW5vbl92bWFgIHdpdGhpbiBgYW5vbl92bWFfY2xvbmVgLlxuXG5GaXJzdCB0aG91Z2h0OiBpcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBnZXRzIGNoYW5nZWQgKmR1cmluZyogdGhpcyBmdW5jdGlvbj8gSSBxdWlja2x5IHJ1bGVkIG91dCB0aGUgb2J2aW91cyBvbmU6IGlmIGBzcmNgIGFuZCBgZHN0YCB3ZXJlIHRoZSBzYW1lIFZNQSwgaXQgd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGxvb3AuIEkgYWxyZWFkeSBwcm92ZWQgdGhhdCBgc3JjYCBjYW4ndCBiZSBgZHN0YCwgYmVjYXVzZSB0aGUgbG9vcCB3b3VsZCBuZXZlciB0ZXJtaW5hdGUuXG5cbkFscmlnaHQsIHdoYXQgaWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IEkga25vdyBpZiBpdCAqaXMqIGVtcHR5LCB0aGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCB3aWxsIG5vdCBleGVjdXRlLCBhbmQgdGhlbiB0aGVyZSB3aWxsIGJlIGEgY2FsbCB0byBgYW5vbl92bWFfbG9ja193cml0ZShzcmMtXHUwMDNlYW5vbl92bWEpYC4gQnV0LCBJIHJlYWxpemVkOiBpZiBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYCBpcyBlbXB0eSwgdGhlbiBgc3JjLVx1MDAzZWFub25fdm1hYCAqbXVzdCogYmUgYE5VTExgLiBUaGUgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBjaGVjayBjb25maXJtcyB0aGlzLiBBbmQsIGlmIGBzcmMtXHUwMDNlYW5vbl92bWFgIGlzIGBOVUxMYCwgdGhlbiBgYWN0aXZlX2Fub25fdm1hYCBpcyBgTlVMTGAsIGFuZCB3ZSByZXR1cm4gZWFybHkuIFNvLCBgc3JjLVx1MDAzZWFub25fdm1hYCAqY2Fubm90KiBiZSBudWxsLiBJZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpc24ndCBgTlVMTGAsIHRoZW4gYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgY2FuJ3QgYmUgZW1wdHksIHJpZ2h0P1xuXG5XYWl0LCBob2xkIG9uLi4uIHRoZSBhc3NlcnRpb24gaW4gYGNoZWNrX2Fub25fdm1hX2Nsb25lYCBkb2Vzbid0IHNheSBgVk1fV0FSTl9PTl9PTkNFKHNyYy1cdTAwM2Vhbm9uX3ZtYSBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZzcmMtXHUwMDNlYW5vbl92bWFfY2hhaW4pKTtgLiBTbywgaXQncyAqcG9zc2libGUqIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm9uLU5VTEwgd2hpbGUgYHNyYy1cdTAwM2Vhbm9uX3ZtYV9jaGFpbmAgaXMgZW1wdHk/IE5vLCB3YWl0ISBUaGUgYGFub25fdm1hX2NoYWluYCBjb250YWlucyB0aGUgYGFub25fdm1hYHMgdGhlIFZNQSBpcyBhdHRhY2hlZCB0by4gSWYgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgbm9uLU5VTEwsIGl0ICptdXN0KiBiZSBpbiBgc3JjLVx1MDAzZWFub25fdm1hX2NoYWluYC4gU28sIHRoZSBjaGFpbiBjYW4gKm5ldmVyKiBiZSBlbXB0eSBpZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBub3QgYE5VTExgLiBUaHVzLCB0aGUgbG9vcCBleGVjdXRlcyBhdCBsZWFzdCBvbmNlLCBhbmQgYHNyY2AgY2Fubm90IGJlIHRoZSBzYW1lIGFzIGBkc3RgLlxuXG5Pa2F5LCBiYWNrIHRvIHRoZSBjb3JlIHF1ZXN0aW9uOiBkb2VzIGBhbm9uX3ZtYV9jbG9uZWAgbW9kaWZ5IGBzcmMtXHUwMDNlYW5vbl92bWFgPyBMZXQncyBjb25zaWRlciB0aGUgd2F5cyBgYW5vbl92bWFgIG1pZ2h0IGJlIHRvdWNoZWQ6IGBhbm9uX3ZtYV9jaGFpbl9hc3NpZ25gLCBgYW5vbl92bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnRgLCBhbmQgYG1heWJlX3JldXNlX2Fub25fdm1hYC4gVGhlIGZpcnN0IG1vZGlmaWVzIHRoZSBjaGFpbiBhbmQgYGFub25fdm1hX2NoYWluYCwgYnV0ICpub3QqIGB2bWEtXHUwMDNlYW5vbl92bWFgLiBUaGUgc2Vjb25kIG1hbmlwdWxhdGVzIHRoZSBSQi10cmVlLCBhZ2Fpbiwgbm90IGB2bWEtXHUwMDNlYW5vbl92bWFgLiBUaGUgdGhpcmQsIGBtYXliZV9yZXVzZV9hbm9uX3ZtYWAsICpkb2VzKiBtb2RpZnkgYGRzdC1cdTAwM2Vhbm9uX3ZtYWAsIGJ1dCBzaW5jZSBgc3JjICE9IGRzdGAsIGl0J3MgaXJyZWxldmFudC4gQW5kIHRoZXJlIGlzIGEgY2FzZSBmb3IgYGRzdC1cdTAwM2Vhbm9uX3ZtYS1cdTAwM2VudW1fYWN0aXZlX3ZtYXMrK2AsIGJ1dCB0aGF0J3Mgbm90IGNoYW5naW5nIGBzcmMtXHUwMDNlYW5vbl92bWFgLlxuXG5TbywgZnJvbSB3aGF0IEkgY2FuIHNlZSwgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHRoZSBjbG9uZSBwcm9jZXNzIGl0c2VsZi4gSXQncyBleGFjdGx5IHRoZSBzYW1lIGFzIGBhY3RpdmVfYW5vbl92bWFgLiBTbyB0aGlzIGxvb2tzIGxpa2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlLCByaWdodD8gQnV0Li4uIHdoeSB3b3VsZCBzb21lb25lIG1ha2UgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlPyBDb21waWxlciB3YXJuaW5nPyBNYXliZS4gQXZvaWRpbmcgYSBLQ1NBTiBkYXRhIHJhY2U/IFBvdGVudGlhbGx5LlxuXG5CdXQgd2FpdCwgZGF0YSByYWNlcyBvY2N1ciB3aGVuIHlvdSBoYXZlIGNvbmN1cnJlbnQgcmVhZHMvd3JpdGVzLiBObyBjb25jdXJyZW50IHdyaXRlcyBhcmUgaGFwcGVuaW5nIGhlcmUsIGJlY2F1c2UgSSBoYXZlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAuIFRodXMsIG5vIG90aGVyIHRocmVhZCBjYW4gY2hhbmdlIGBzcmNgIGFuZCB0aHVzLCBubyBjb25jdXJyZW50IHdyaXRlIGV4aXN0cy5cblxuV2hhdCBpZiB0aGUgVk1BIGBzcmNgIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3Nlcz8gTm9wZS4gVk1BcyBhcmUgTk9UIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3Nlcy4gRWFjaCBwcm9jZXNzIGhhcyBpdHMgb3duIFZNQXMuIEFuZCBldmVuIGlmIHRoZXkgc2hhcmUgYW4gYGFub25fdm1hYCwgdGhleSBoYXZlIHRoZWlyIG93biBWTUFzLiBTbywgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXMgYSBmaWVsZCBpbiBhIFZNQSBiZWxvbmdpbmcgdG8gYHNyYy1cdTAwM2V2bV9tbWAuIFRoZSBtbWFwIHdyaXRlIGxvY2sgb24gYHNyYy1cdTAwM2V2bV9tbWAgbWVhbnMgKm5vKiBvdGhlciB0aHJlYWQgY2FuIG1vZGlmeSBpdC5cblxuQ291bGQgYGtodWdlcGFnZWRgIGJlIGRvaW5nIHNvbWV0aGluZyBmdW5reT8gVGltZSB0byBjaGVja1xuXG4iLCJJbnB1dFRva2VucyI6NDQ2MDUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NDQuMzg2Mzk4ODM2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzY5MjU3NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjQ1LjM2MzMzNTY0OVoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUxMDUzOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmNlcm5zIFJlZ2FyZGluZyBBbm9ueW1vdXMgVk1BcyBhbmQgS1NNKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYW5zd2VyIGlzIGRlZmluaXRpdmVseSBcIm5vLlwiIEJ1dCwgdGhlIHF1ZXN0aW9uIGxpbmdlcmluZyBpbiBteSBtaW5kIGlzIGFib3V0IGBzcmMtXHUwMDNlYW5vbl92bWFgIGFuZCB0aGUgcG90ZW50aWFsIGZvciBga3NtYCDigJMgS2VybmVsIFNhbWVwYWdlIE1lcmdpbmcg4oCTIHRvIGludHJvZHVjZSBtb2RpZmljYXRpb25zLiBUaGF0J3MgdGhlIHJlYWwgY3J1eCBvZiB0aGlzLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBsYXNlci1zaGFycCBvbiB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgc3RydWN0dXJlLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBtb3JwaHMgaW50byBhIHNwZWNpZmljIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBjb25jbHVzaXZlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGBrc21gIGFjdGl2ZWx5IHRhbXBlcnMgd2l0aCBgdm1hLVx1MDAzZWFub25fdm1hYC4gVGhpcyBpc24ndCBqdXN0IGEgY2FzdWFsIGN1cmlvc2l0eTsgaXQncyBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24gSSBuZWVkIHRvIHZhbGlkYXRlIHRvIGVuc3VyZSB0aGUgc3RhYmlsaXR5IGFuZCBleHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBga3NtYCBjb2RlIGFuZCB0cmFjaW5nIHRvIHNlZSBpZiBpdCBtb2RpZmllcyBgdm1hLVx1MDAzZWFub25fdm1hYCBpbiBhbnkgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzExNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjQ5LjIxNDM5MTk2M1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5Mzc3MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NDkuMjcwMzM2Mjk5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjMzODE3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIGBhbm9uX3ZtYWAgYW5kIGBtcmVtYXBgIEludGVyYWN0aW9uKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSByZXNwb25zZSBpcyBuZWdhdGl2ZS4gQnV0IGEgbmFnZ2luZyBjb25jZXJuIHN1cmZhY2VzOiBjb3VsZCB0aGUgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgYmUgYWx0ZXJlZCBkdXJpbmcgYW4gYG1yZW1hcGAgb3BlcmF0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuIFRoZSBwb3RlbnRpYWwgZm9yIGBtcmVtYXBgIHRvIGludGVyZmVyZSB3aXRoIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEncyAoVk1BJ3MpIGFzc29jaWF0ZWQgYW5vbnltb3VzIHZpcnR1YWwgbWVtb3J5IGFyZWEgKGBhbm9uX3ZtYWApIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGRpZmZpY3VsdC10by10cmFjayBidWdzLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgbXJlbWFwYCBjb2RlIGFuZCB2ZXJpZnkgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSBjYXBhYmlsaXR5IG9mIG1vZGlmeWluZyBgdm1hLVx1MDAzZWFub25fdm1hYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgbGVnaXRpbWF0ZSBjb25jZXJuLCBvciBpZiBJJ20gd29ycnlpbmcgYWJvdXQgYSBub24taXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3Mzg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTM6NTMuNjkzNzIwODMzWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMTc4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hLVxcdTAwM2Vhbm9uX3ZtYSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21yZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNDo1Mzo1My43NDIxMzAzMDhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDMxMjc2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbW1lZGlhdGUgQ29uY2VybnMgUmVnYXJkaW5nIGBhbm9uX3ZtYWAgYW5kIGBtYWR2aXNlYCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFuc3dlciBpcyBubywgYnV0IHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBndXQncyB0ZWxsaW5nIG1lIHRoZXJlJ3MgYSBwb3RlbnRpYWwgaXNzdWUgYnJld2luZyBoZXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBgbWFkdmlzZWAgaW50ZXJhY3RzIHdpdGggdGhlIGBhbm9uX3ZtYWAgc3RydWN0dXJlLiBNeSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgdGVsbHMgbWUgdGhhdCBpdCdzIG9mdGVuIHRoZSBsZXNzIG9idmlvdXMgaW50ZXJhY3Rpb25zIHRoYXQgbGVhZCB0byB0aGUgbW9zdCBjaGFsbGVuZ2luZyBidWdzLlxuXG5UaGUgY29yZSBxdWVzdGlvbiB0aGF0J3MgZHJpdmluZyBtZSBub3cgaXM6IGRvZXMgYG1hZHZpc2VgICphY3R1YWxseSogbW9kaWZ5IGB2bWEtXHUwMDNlYW5vbl92bWFgPyBXZSBuZWVkIHRvIHZlcmlmeSB0aGUgY29kZSBwYXRoIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gV2UgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbWFkdmlzZWAgaW1wbGVtZW50YXRpb24gYW5kIHRoZSByZWxldmFudCBtZW1vcnkgbWFwcGluZyBzdHJ1Y3R1cmVzLCByaWdodCBkb3duIHRvIHRoZSBiaXRzLCB0byBiZSBjZXJ0YWluIHRoYXQgd2hhdGV2ZXIgb3B0aW1pemF0aW9uIG9yIG1hbmlwdWxhdGlvbiBgbWFkdmlzZWAgcGVyZm9ybXMgZG9lc24ndCBpbmFkdmVydGVudGx5IGFmZmVjdCB0aGUgYGFub25fdm1hYCBpbiBhIHdheSB0aGF0IGJyZWFrcyBhc3N1bXB0aW9ucyBvciBpbnRyb2R1Y2VzIHN1YnRsZSBjb3JydXB0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY2MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjU3LjM3NjQ0NTc1OVoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MzUzMzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYS1cXHUwMDNlYW5vbl92bWEgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjUzOjU3LjQyNjE4ODI2NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI3Mjc0NDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IERldGVybWluaW5nIEZ1enppbmcgTmVjZXNzaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb3NtZXRpYy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyByZXBsYWNpbmcgYSBkaXJlY3QgZGVyZWZlcmVuY2Ugb2YgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgd2l0aCBhIGxvY2FsIHZhcmlhYmxlLCBgYWN0aXZlX2Fub25fdm1hYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIHNhbWUgdmFsdWUuXG5cbk15IGZpcnN0IHRob3VnaHQgd2FzLCBcIklzIHRoZXJlICphbnkqIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIG9mIGBzcmMtXHUwMDNlYW5vbl92bWFgP1wiIElmIHRoZXJlIHdlcmUsIHRoaXMgY291bGQgaW50cm9kdWNlIGEgZGF0YSByYWNlLCBldmVuIGlmIEtDU0FOIGlzbid0IHNjcmVhbWluZyBhYm91dCBpdC4gQnV0LCBhZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGl0IHNlZW1zIHRoZXJlJ3Mgbm8gd2F5LiBJJ20gaG9sZGluZyB0aGUgbW1hcCB3cml0ZSBsb2NrIHdoZW4gYGFub25fdm1hX2Nsb25lYCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgbm8gb3RoZXIgdGhyZWFkIGNhbiB0b3VjaCBgc3JjLVx1MDAzZWFub25fdm1hYCBhdCB0aGUgc2FtZSB0aW1lLiBJJ3ZlIHJlLWNoZWNrZWQgdGhhdCBgc3JjYCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgYHZtYV9hZGp1c3RgIG9yIGB2bWFfbWVyZ2VgLCBib3RoIG9mIHdoaWNoIGFsc28gcmVxdWlyZSB0aGUgbW1hcCB3cml0ZSBsb2NrLiBUaGUgb25seSBjaGFuZ2VzIGFyZSB0byBgZHN0YCwgd2hpY2ggZG9lc24ndCBhbHRlciBgc3JjYC5cblxuSSBjb25zaWRlcmVkIGEgcG90ZW50aWFsIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyByZWxvYWRlZCwgYW5kIHRoZXJlIG1heSBiZSBhIHRpbnkgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHJlbG9hZGluZyBgc3JjLVx1MDAzZWFub25fdm1hYC4gT3IgbWF5YmUgaXQncyBqdXN0IGNsZWFuZXIgY29kZS4gSWYgaXQncyBqdXN0IGFuIG9wdGltaXphdGlvbiBvciBjbGVhbnVwLCBpdCdzIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGF0IG1lYW5zIGl0IGRvZXNuJ3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGl0IGlzbid0IHNvbWV0aGluZyBJIG5lZWQgdG8gZnV6ei4gU28sIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSAqYWJzb2x1dGVseSogc3VyZS4gSXMgYHNyY2AgYSBtYWNybz8gTm8sIGl0J3MgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuIElzIHRoZXJlIGFueSBjaGFuY2UgdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBnZXRzIG1vZGlmaWVkIGJldHdlZW4gaXRzIGluaXRpYWxpemF0aW9uIGFuZCB3aGVyZSBpdCdzIHVzZWQ/IE5vLCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoaXMuXG5cblNvLCBpdCdzIGNlcnRhaW4gdGhhdCBgYWN0aXZlX2Fub25fdm1hYCBpcyAqZXhhY3RseSogYHNyYy1cdTAwM2Vhbm9uX3ZtYWAuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aXRoIGBzcmMtXHUwMDNlYW5vbl92bWFgIGl0IG1pZ2h0IGJlIHJlYWQgYWdhaW4gZnJvbSBtZW1vcnkuIEFuZCBzaW5jZSBgc3JjLVx1MDAzZWFub25fdm1hYCBjYW4ndCBjaGFuZ2UsIHRoZSB2YWx1ZXMgYXJlIGlkZW50aWNhbC4gSXQncyBhIGNvc21ldGljIGNoYW5nZSBvciBhIHRpbnkgb3B0aW1pemF0aW9uLCBub3RoaW5nIG1vcmUuXG5cbkhlcmUncyBteSBmdWxsIHJlYXNvbmluZzogVGhlIHBhdGNoIHVzZXMgYSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbml0aWFsaXplZCB0byBgc3JjLVx1MDAzZWFub25fdm1hYC4gVGhlIG1tYXAgd3JpdGUgbG9jayBvbiBgc3JjLVx1MDAzZXZtX21tYCBndWFyYW50ZWVzIHRoYXQgYHNyYy1cdTAwM2Vhbm9uX3ZtYWAgaXNuJ3QgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuIFRoZSBvcGVyYXRpb25zIG9uIHRoZSBkaXN0aW5jdCBgZHN0YCB3aXRoaW4gYGFub25fdm1hX2Nsb25lYCBhbHNvIGRvbid0IHRvdWNoIGBzcmMtXHUwMDNlYW5vbl92bWFgLiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBvZiBgc3JjLVx1MDAzZWFub25fdm1hYCBpcyBjb25zdGFudCBhbmQgdGhlIHJlcGxhY2VtZW50IGlzIGEgY29zbWV0aWMgb3IgbWljcm8tb3B0aW1pemF0aW9uIHdpdGggbm8gZnVuY3Rpb25hbCBlZmZlY3QuIE5vIGZ1enppbmcgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzk3MSwiT3V0cHV0VG9rZW5zIjoyNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA0OjU0OjE0LjY5ODkzNTQ5NloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhbm9uX3ZtYV9jbG9uZWAgaW4gYG1tL3JtYXAuY2AgdG8gdXNlIHRoZSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcgYHNyYy1cXHUwMDNlYW5vbl92bWFgIGFnYWluIHdoZW4gY2FsbGluZyBgYW5vbl92bWFfbG9ja193cml0ZWAuIGBhY3RpdmVfYW5vbl92bWFgIGlzIGluaXRpYWxpemVkIHRvIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gU2luY2UgYGFub25fdm1hX2Nsb25lYCBpcyBhbHdheXMgY2FsbGVkIHdpdGggdGhlIG1tYXAgd3JpdGUgbG9jayBoZWxkIG9uIGBzcmMtXFx1MDAzZXZtX21tYCAoYXMgYXNzZXJ0ZWQgYnkgYGNoZWNrX2Fub25fdm1hX2Nsb25lYCksIG5vIG90aGVyIHRocmVhZCBjYW4gY29uY3VycmVudGx5IG1vZGlmeSBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAuIEZ1cnRoZXJtb3JlLCBgc3JjYCBhbmQgYGRzdGAgYXJlIGFsd2F5cyBkaXN0aW5jdCBWTUFzLCBzbyB0aGUgb3BlcmF0aW9ucyBvbiBgZHN0YCB3aXRoaW4gdGhlIGZ1bmN0aW9uIGRvIG5vdCBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBUaHVzLCBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgcmVtYWlucyBjb25zdGFudCB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbiwgYW5kIHJlcGxhY2luZyBpdCB3aXRoIHRoZSBsb2NhbCB2YXJpYWJsZSBgYWN0aXZlX2Fub25fdm1hYCBpcyBhIHB1cmVseSBjb3NtZXRpYyBjaGFuZ2Ugb3IgbWljcm8tb3B0aW1pemF0aW9uIHRoYXQgZG9lcyBub3QgYWx0ZXIgdGhlIGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGZsb3cuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYW5vbl92bWFfY2xvbmVgIGluIGBtbS9ybWFwLmNgIHRvIHVzZSB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaW5zdGVhZCBvZiBkZXJlZmVyZW5jaW5nIGBzcmMtXFx1MDAzZWFub25fdm1hYCBhZ2FpbiB3aGVuIGNhbGxpbmcgYGFub25fdm1hX2xvY2tfd3JpdGVgLiBgYWN0aXZlX2Fub25fdm1hYCBpcyBpbml0aWFsaXplZCB0byBgc3JjLVxcdTAwM2Vhbm9uX3ZtYWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFNpbmNlIGBhbm9uX3ZtYV9jbG9uZWAgaXMgYWx3YXlzIGNhbGxlZCB3aXRoIHRoZSBtbWFwIHdyaXRlIGxvY2sgaGVsZCBvbiBgc3JjLVxcdTAwM2V2bV9tbWAgKGFzIGFzc2VydGVkIGJ5IGBjaGVja19hbm9uX3ZtYV9jbG9uZWApLCBubyBvdGhlciB0aHJlYWQgY2FuIGNvbmN1cnJlbnRseSBtb2RpZnkgYHNyYy1cXHUwMDNlYW5vbl92bWFgLiBGdXJ0aGVybW9yZSwgYHNyY2AgYW5kIGBkc3RgIGFyZSBhbHdheXMgZGlzdGluY3QgVk1Bcywgc28gdGhlIG9wZXJhdGlvbnMgb24gYGRzdGAgd2l0aGluIHRoZSBmdW5jdGlvbiBkbyBub3QgbW9kaWZ5IGBzcmMtXFx1MDAzZWFub25fdm1hYC4gVGh1cywgYHNyYy1cXHUwMDNlYW5vbl92bWFgIHJlbWFpbnMgY29uc3RhbnQgdGhyb3VnaG91dCB0aGUgZnVuY3Rpb24sIGFuZCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbG9jYWwgdmFyaWFibGUgYGFjdGl2ZV9hbm9uX3ZtYWAgaXMgYSBwdXJlbHkgY29zbWV0aWMgY2hhbmdlIG9yIG1pY3JvLW9wdGltaXphdGlvbiB0aGF0IGRvZXMgbm90IGFsdGVyIHRoZSBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDQ6NTQ6MTQuNjk4OTY2NjI2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxhb5f[1] Phase: Running StartedAt: 2026-08-17 04:54:25 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhb5f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-17 04:54:25 +0000 UTC FinishedAt: 2026-08-17 04:54:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}