-----BEGIN PGP MESSAGE----- Version: Keybase Go 6.0.2 (linux) Comment: https://keybase.io/download xA0DAAgBXK32/a0WXi0By+F0AOIAAAAA7i0tLQp0aXRsZTogU2hvcnQgYW5kIExv bmcgT3B0aW9ucyB3aXRoIEdvIGZsYWcgc3RhbmRhcmQgcGFja2FnZQpkYXRlOiAy MDIxLTA1LTE0VDAyOjE4OjI1KzAyOjAwCmRlc2NyaXB0aW9uOiBEaXZpbmcgaW50 byBHbyBzb3VyY2UgY29kZQpmZWF0dXJlZF9pbWFnZTogIi9pbWcvZ29sYW5nX2dv cGhlcl9mbHlpbmcuanBnIgp0YWdzOiBbZ29sYW5nLCBzb3VyY2UgY29kZSwgZGVl cCBkaXZlLCBwcm9ncmFtbWluZ10KY2F0ZWdvcnk6IGdvbGFuZwotLS0KClJlY2Vu dGx5IEkgd2FzIGJyb3dzaW5nIHRoZSBhd2Vzb21lClthZ2VdKGh0dHBzOi8vZ2l0 aHViLmNvbS9GaWxvU290dGlsZS9hZ2UpICh3aGljaCBJIGVuY291cmFnZSBldmVy eW9uZSB0bwpsb29rIGF0IGFuZCB1c2UgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeSks IGFuZCBub3RpY2VkIHNvbWV0aGluZyB0aGF0IEkgaGFkCiBhbHdheXMgbWlzdGFr ZW5seSBhc3N1bWVkIHdhc24ndCBwb3NzaWJsZSB3aXRoIHRoZSBHbyBzdGFuZGFy ZCBsaWJyYXJ5LgoKPiBJcyBpdCBwb3NzaWJsZSB0byBoYXZlIHNob3J0ICphbmQq IGxvbmcgb3B0aW9ucyB1c2luZyBqdXN0IHRoZSBgZmxhZ2AgcGFja2FnZT8KCkFw cGFyZW50bHkgaXQgaXMgcG9zc2libGUhCgpUbyBnaXZlIGEgbGl0dGxlIG1vcmUg Y29udGV4dCwgdGhlIHNob3J0IG9wdGlvbnMgYXJlIHRob3NlIHRoYXQgc3RhcnQK d2l0aCBhIHNpbmdsZSBkYXNoIChgLWApIGFuZCBjb25zaXN0IG9mIGEgc2luZ2xl IGxldHRlciwgZS5nOiBmb3IgbW9zdApjb21tYW5kIGxpbmUgYXJndW1lbnQgdG8g c2V0IHZlcmJvc2UgbW9kZSB5b3UnZCB1c2U6IGAtdmAuCkluIGNvbnRyYXN0LCB0 aGUgbG9uZyBvcHRpb25zIGFyZSB0aG9zZSB0aGF0IHN0YXJ0IHdpdGggZG91Ymxl IGRhc2ggYC0tYCBhbmQKY29uc2lzdCBvZiBhIHdvcmQgZS5nOiB0byB1c2UgdGhl IHNhbWUgZXhhbXBsZSBvZiB2ZXJib3NlIG1vZGUgdGhhdCB3b3VsZCBiZQpgLS12 ZXJib3NlYC4KCkluIG9yZGVyIHRvIGZpbmQgdGhpcyBvdXQgbGV0J3MgZmlyc3Qg d3JpdGUgc21hbGwgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIGBmbGFnYApwYWNrYWdl IGFuZCBkaXNjb3ZlciBob3cgdGhlIGludm9jYXRpb24gb2YgdGhlbSBjaGFuZ2Ug dGhlIG91dHB1dDoKCkZpcnN0IGxldCdzIGNyZWF0ZSBhIGRpcmVjdG9yeSB3aGVy ZSB0byBwdXQgdGhlIHByb2dyYW0gYW5kIGluaXRpYWxpemUgdGhlCmdvLm1vZDoK CmBgYHNoCiQgbWtkaXIgLXAgfi9nb19leHBlcmltZW50cy91c2luZ19mbGFnCiQg Y2QgISQKJCBnbyBtb2QgaW5pdCBnaXRodWIuY29tL2NoaWJieTBuZS8kKGJhc2Vu YW1lICQocHdkKSkKYGBgCgpUaGlzIGNyZWF0ZXMgYSBkaXJlY3RvcnkgYHVzaW5n X2ZsYWdgIGluc2lkZSBhIGBnb19leHBlcmltZW50c2AKZGlyZWN0b3J5IGxvY2F0 ZWQgaW4geW91ciBob21lIGRpcmVjdG9yeSBhbmQgaW5pdGlhbGl6ZXMgYSBnbyBt b2Qgd2l0aCB0aGUKb3JnYW5pemF0aW9uL3VzZXIgbmFtZSBgY2hpYmJ5MG5lYCAo bXkgdXNlcm5hbWUpIGFuZCByZXBvc2l0b3J5IG5hbWUgdGhlIHNhbWUKYXMgdGhl IGRpcmVjdG9yeSBuYW1lIChgdXNpbmdfZmxhZ2ApLiBPZiBjb3Vyc2UgeW91IGNh biB1c2UgeW91ciBHaXRodWIKdXNlcm5hbWUsIGJ1dCBzaW5jZSB0aGlzIGlzIGp1 c3QgZm9yIGV4cGVyaW1lbnRhdGlvbiBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIK dGhlIG9yZ2FuaXphdGlvbi91c2VybmFtZSBvciBtb2R1bGUgbmFtZSB5b3UgY2hv b3NlLgoKKiAqVGhlIGAhJGAgdXNlZCBpbiB0aGUgc2Vjb25kIGxpbmUgaXMgYSBz aG9ydGN1dCB0byByZWZlciB0byB0aGUgbGFzdCBhcmd1bWVudCBvZiB0aGUgbGFz dCBjb21tYW5kLiBQcmV0dHkgbmVhdCBodWg/IFlvdSBjYW4gY2hlY2sgbW9yZSBh Ym91dCBpdCBpbiB0aGUgW21hbiBwYWdlcyBvZiBiYXNoIGxvb2tpbmcgaW50byBo aXN0b3J5IGV4cGFuc2lvbl0oaHR0cHM6Ly9saW51eC5kaWUubmV0L21hbi8xL2Jh c2gpKgoKCk5vdyBjb3B5IHRoZSBmb2xsb3dpbmcgY29kZSBpbiBhbmQgd3JpdGUg aXQgdG8gYSBgbWFpbi5nb2AgZmlsZSwgYW5kIGJ1aWxkIGl0CndpdGggYGdvIGJ1 aWxkYAoKYGBgZ28KcGFja2FnZSBtYWluCgppbXBvcnQgKAogICAgImZtdCIKICAg ICJmbGFnIgopCgpmdW5jIG1haW4oKSB7CiAgICB2YXIgdmVyYm9zZSBib29sCiAg ICBmbGFnLkJvb2xWYXIoJnZlcmJvc2UsICJ2ZXJib3NlIiwgZmFsc2UsICJ2ZXJi b3NlIG91dHB1dCIpCiAgICBmbGFnLlBhcnNlKCkKICAgIGlmIHZlcmJvc2Ugewog ICAgICAgIGZtdC5QcmludGxuKCJ2ZXJib3NlIGlzIG9uIikKICAgIH0KfQpgYGAK ClRoaXMgcHJvZ3JhbSBzaG91bGQgd3JpdGU6IGB2ZXJib3NlIGlzIG9uYCB0byBz dGRvdXQgd2hlbmV2ZXIgdGhlIGB2ZXJib3NlYCBmbGFnCmlzIHNldCwgb3RoZXJ3 aXNlIGl0IHNob3VsZG4ndCBwcmludCBhbnl0aGluZy4KCkxldCdzIHNlZSB0aGUg b3V0cHV0IHdpdGggb25seSBubyBmbGFnOgoKYGBgc2gKJCAuL3VzaW5nX2ZsYWcK JApgYGAKCk5vIG91dHB1dCBhcyBleHBlY3RlZC4KCkxldCdzIHNlZSB0aGUgb3V0 cHV0IHdpdGggb25seSBvbmUgZGFzaCAoYXMgdXN1YWxseSBkb25lKToKCmBgYHNo CiQgLi91c2luZ19mbGFnIC12ZXJib3NlCnZlcmJvc2UgaXMgb24KJApgYGAKCk5v dyBsZXQncyBzZWUgdGhlIG91dHB1dCB3aXRoICp0d28qIGRhc2hlczoKCmBgYHNo CiQgLi91c2luZ19mbGFnIC0tdmVyYm9zZQp2ZXJib3NlIGlzIG9uCiQKYGBgCgpB cyB5b3UgY2FuIHNlZSB0aGUgYGZsYWdgIHBhY2thZ2UgYWxsb3dzIHRoaXMgdXNh Z2Ugd2l0aCBkb3VibGUgZGFzaCBvciBsb25nCm9wdGlvbiBmb3JtYXQgYnV0IGl0 cyB1c2FnZSBpcyBub3QgKiJ3ZWxsIGRvY3VtZW50ZWQiKiBpbiB0aGUgcGFja2Fn ZQpkb2N1bWVudGF0aW9uLgoKV2h5IGlzIHRoaXMgdGhlIGNhc2U/CgpMZXQncyBk aWcgaW50byB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBzZXQgYSBgQm9vbFZhcmAgKHdo aWNoIGlzIHRoZSBjYXNlIGZvciBhbnkKWFZhciB3aGVyZSAqWCogaXMgYW55IHR5 cGUpLiBBbGwgdGhlIHNvdXJjZSBjb2RlIHNob3duIGNvcnJlc3BvbmRzIHRvICoq Z28gdmVyc2lvbgpnbzEuMTYuNCBsaW51eC9hbWQ2NCoqOgoKYGBgZ28KLy8gQm9v bFZhciBkZWZpbmVzIGEgYm9vbCBmbGFnIHdpdGggc3BlY2lmaWVkIG5hbWUsIGRl ZmF1bHQgdmFsdWUsIGFuZCB1c2FnZSBzdHJpbmcuCi8vIFRoZSBhcmd1bWVudCBw IHBvaW50cyB0byBhIGJvb2wgdmFyaWFibGUgaW4gd2hpY2ggdG8gc3RvcmUgdGhl IHZhbHVlIG9mIHRoZSBmbGFnLgpmdW5jIEJvb2xWYXIocCAqYm9vbCwgbmFtZSBz dHJpbmcsIHZhbHVlIGJvb2wsIHVzYWdlIHN0cmluZykgewoJQ29tbWFuZExpbmUu VmFyKG5ld0Jvb2xWYWx1ZSh2YWx1ZSwgcCksIG5hbWUsIHVzYWdlKQp9CmBgYAoK TGV0J3MgZGVjb21wb3NlIHRoZSBtYWdpYyBvdXQgb2YgdGhpcyBvbmUgbGluZXI6 CgoxLiBXaGF0IGRvZXMgYG5ld0Jvb2xWYWx1ZWAgZG8/CgpgYGBnbwovLyAtLSBi b29sIFZhbHVlCnR5cGUgYm9vbFZhbHVlIGJvb2wKCmZ1bmMgbmV3Qm9vbFZhbHVl KHZhbCBib29sLCBwICpib29sKSAqYm9vbFZhbHVlIHsKCSpwID0gdmFsCglyZXR1 cm4gKCpib29sVmFsdWUpKHApCn0KYGBgCgpgbmV3Qm9vbFZhbHVlYCBpcyBhbiB1 bmV4cG9ydGVkIChwcml2YXRlIGluIG90aGVyIGxhbmd1YWdlcyB0ZXJtaW5vbG9n eSkKZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYGJvb2xWYWx1ZWAgd2hpY2ggaXMg YW4gdHlwZSBhbGlhcyBmb3IgYGJvb2xgLiBUaGUgcG9pbnRlciB0bwpgYm9vbGAg cGFzc2VkIChgcGAgaW4gYEJvb2xWYXJgIGFuZCBpbiBgbmV3Qm9vbFZhbHVlYCBm dW5jdGlvbnMpIGlzIGFzc2lnbmVkIHRvCnRoZSBkZWZhdWx0IHZhbHVlIChgdmFs dWVgIGluIGBCb29sVmFyYCBmdW5jdGlvbiBhbmQgYHZhbGAgaW4gYG5ld0Jvb2xW YWx1ZWAKZnVuY3Rpb24pLgpUaGVuIHRoZSBwb2ludGVyIHRvIGBib29sYCBpcyBj YXN0ZWQgdG8gYSBwb2ludGVyIHRvIGBib29sVmFsdWVgIGFuZApyZXR1cm5lZC4K CllvdSBtaWdodCBiZSB3b25kZXJpbmc6ICpXaHkgY3JlYXRlIHRoaXMgaW50ZXJu YWwgYGJvb2xWYWx1ZWAgZm9yIHNpbXBseQpzdG9yaW5nIHRoZSBgYm9vbGA/KgoK QmVjYXVzZSBgYm9vbGAgbmVlZHMgdG8gYmUgYXVnbWVudGVkIHdpdGggbWV0aG9k cyB1c2VkIGJ5IHRoZSBmbGFncyBwYWNrYWdlLApzdWNoIGFzIGBHZXQoKWAsIGBT ZXQoKWAgYW5kIGBTdHJpbmcoKWAsIHRoZXNlIG1ldGhvZHMgc2F0aXNmeSB0aGUg aW50ZXJmYWNlcwp1c2VkIHRocm91Z2ggdGhlIHBhY2thZ2Ugd2hpY2ggYXJlIGBH ZXR0ZXJgIGFuZCBgVmFsdWVgLgoKCmBgYGdvCnR5cGUgR2V0dGVyIGludGVyZmFj ZSB7CiAgIFZhbHVlCiAgIEdldCgpIGludGVyZmFjZXt9Cn0KYGBgCgpgYGBnbwp0 eXBlIFZhbHVlIGludGVyZmFjZSB7CiAgICBTdHJpbmcoKSBzdHJpbmcKICAgIFNl dChzdHJpbmcpIGVycm9yCn0KYGBgCkFjY29yZGluZyB0byBkb2N1bWVudGF0aW9u OiBgVmFsdWVgIGlzIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGR5bmFtaWMgdmFsdWUK c3RvcmVkIGluIGEgZmxhZy4gYEdldHRlcmAgaXMgYW4gaW50ZXJmYWNlIHRoYXQg YWxsb3dzIHRoZSBjb250ZW50cyBvZgpgVmFsdWVgIHRvIGJlIHJldHJpZXZlZC4K CllvdSBjYW4gcmVhZCBtb3JlIG9mIHRoZSBbR2V0dGVyXShodHRwczovL2dvbGFu Zy5vcmcvcGtnL2ZsYWcvI0dldHRlcikgYW5kIHRoZQpbVmFsdWVdKGh0dHBzOi8v Z29sYW5nLm9yZy9wa2cvZmxhZy8jVmFsdWUpIGludGVyZmFjZSBpbiB0aGUgZG9j dW1lbnRhdGlvbiwKYnV0IGZvciBub3cgbGV0J3MgY29udGludWUgd2l0aCBvdXIg ZGl2ZS4KCgoyLiBXaGF0IGlzIGBDb21tYW5kTGluZWAgYW5kIHdoYXQgZG9lcyBp dHMgbWV0aG9kIGBWYXJgIGRvPwoKCmBgYGdvCi8vIENvbW1hbmRMaW5lIGlzIHRo ZSBkZWZhdWx0IHNldCBvZiBjb21tYW5kLWxpbmUgZmxhZ3MsIHBhcnNlZCBmcm9t IG9zLkFyZ3MuCi8vIFRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIHN1Y2ggYXMgQm9v bFZhciwgQXJnLCBhbmQgc28gb24gYXJlIHdyYXBwZXJzIGZvciB0aGUKLy8gbWV0 aG9kcyBvZiBDb21tYW5kTGluZS4KdmFyIENvbW1hbmRMaW5lID0gTmV3RmxhZ1Nl dChvcy5BcmdzWzBdLCBFeGl0T25FcnJvcikKYGBgCgpBcyBpdCdzIHZlcnkgd2Vs bCBkZXNjcmliZWQgaW4gdGhlIGdvZG9jLCBgQ29tbWFuZExpbmVgIGlzIHRoZSBk ZWZhdWx0IGZsYWcKc2V0IG9mIGNvbW1hbmQgbGluZSBmbGFncyBmb3IgdGhlIGdp dmVuIGV4ZWN1dGFibGUsIChUaGUgbmFtZSB1c2VkIHRvIGludm9rZQp0aGUgcHJv Z3JhbSBpcyBhbHdheXMgZ2l2ZW4gYnkgYG9zLkFyZ3NbMF1gKQoKQW5kIHRoZSBg VmFyYCBtZXRob2Q6CgpgYGBnbwovLyBWYXIgZGVmaW5lcyBhIGZsYWcgd2l0aCB0 aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHVzYWdlIHN0cmluZy4gVGhlIHR5cGUgYW5k Ci8vIHZhbHVlIG9mIHRoZSBmbGFnIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZmly c3QgYXJndW1lbnQsIG9mIHR5cGUgVmFsdWUsIHdoaWNoCi8vIHR5cGljYWxseSBo b2xkcyBhIHVzZXItZGVmaW5lZCBpbXBsZW1lbnRhdGlvbiBvZiBWYWx1ZS4gRm9y IGluc3RhbmNlLCB0aGUKLy8gY2FsbGVyIGNvdWxkIGNyZWF0ZSBhIGZsYWcgdGhh dCB0dXJucyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgaW50byBhIHNsaWNlCi8v IG9mIHN0cmluZ3MgYnkgZ2l2aW5nIHRoZSBzbGljZSB0aGUgbWV0aG9kcyBvZiBW YWx1ZTsgaW4gcGFydGljdWxhciwgU2V0IHdvdWxkCi8vIGRlY29tcG9zZSB0aGUg Y29tbWEtc2VwYXJhdGVkIHN0cmluZyBpbnRvIHRoZSBzbGljZS4KZnVuYyAoZiAq RmxhZ1NldCkgVmFyKHZhbHVlIFZhbHVlLCBuYW1lIHN0cmluZywgdXNhZ2Ugc3Ry aW5nKSB7CgkvLyBSZW1lbWJlciB0aGUgZGVmYXVsdCB2YWx1ZSBhcyBhIHN0cmlu ZzsgaXQgd29uJ3QgY2hhbmdlLgoJZmxhZyA6PSAmRmxhZ3tuYW1lLCB1c2FnZSwg dmFsdWUsIHZhbHVlLlN0cmluZygpfQoJXywgYWxyZWFkeXRoZXJlIDo9IGYuZm9y bWFsW25hbWVdCglpZiBhbHJlYWR5dGhlcmUgewoJCXZhciBtc2cgc3RyaW5nCgkJ aWYgZi5uYW1lID09ICIiIHsKCQkJbXNnID0gZm10LlNwcmludGYoImZsYWcgcmVk ZWZpbmVkOiAlcyIsIG5hbWUpCgkJfSBlbHNlIHsKCQkJbXNnID0gZm10LlNwcmlu dGYoIiVzIGZsYWcgcmVkZWZpbmVkOiAlcyIsIGYubmFtZSwgbmFtZSkKCQl9CgkJ Zm10LkZwcmludGxuKGYuT3V0cHV0KCksIG1zZykKCQlwYW5pYyhtc2cpIC8vIEhh cHBlbnMgb25seSBpZiBmbGFncyBhcmUgZGVjbGFyZWQgd2l0aCBpZGVudGljYWwg bmFtZXMKCX0KCWlmIGYuZm9ybWFsID09IG5pbCB7CgkJZi5mb3JtYWwgPSBtYWtl KG1hcFtzdHJpbmddKkZsYWcpCgl9CglmLmZvcm1hbFtuYW1lXSA9IGZsYWcKfQpg YGAKClRoZXJlJ3MgYSBsb3QgZ29pbmcgb24gaW4gdGhlcmUgYnV0IGxldCdzIGdv IHN0ZXAgYnkgc3RlcC4KClRoZSBnb2RvYyBtZW50aW9ucyB0aGF0IGBWYXJgJ3Mg Zmlyc3QgYXJndW1lbnQgdXN1YWxseSBob2xkcyBhIHVzZXItZGVmaW5lZAppbXBs ZW1lbnRhdGlvbiBvZiBgVmFsdWVgIGFuZCBpdCBjb3VsZCBoYXZlIGEgY3VzdG9t IGBTZXQoKWAgbWV0aG9kIHRoYXQKY29udmVydHMgaXRzIGFyZ3VtZW50cyBpbnRv IGEgc2xpY2Ugb3Igc29tZSBvdGhlciB0eXBlIGFnZ3JlZ2F0ZSB0eXBlLiBJbiBv dXIKY2FzZSB0aGF0J3Mgbm90IHRoZSBjYXNlIGJ1dCBzaW5jZSBpdCdzIHBhcnQg b2YgdGhpcyBtZXRob2QgZG9jdW1lbnRhdGlvbgp3aGljaCBpcyBzaG93biBpbiB0 aGUgZ29kb2MgaXQncyBnb29kIHRvIGJlIGFzIGdlbmVyYWwgYXMgcG9zc2libGUu CgpMb29raW5nIGF0IHRoZSBjb2RlIHdlIHNlZSB0aGF0OgoKMS4gQSBgRmxhZ2Ag aXMgY3JlYXRlZC4KCmBgYGdvCmZsYWcgOj0gJkZsYWd7bmFtZSwgdXNhZ2UsIHZh bHVlLCB2YWx1ZS5TdHJpbmcoKX0KYGBgCgpBbmQgYSBgRmxhZ2AgaXM6CgpgYGBn bwovLyBBIEZsYWcgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBmbGFnLgp0eXBl IEZsYWcgc3RydWN0IHsKCU5hbWUgICAgIHN0cmluZyAvLyBuYW1lIGFzIGl0IGFw cGVhcnMgb24gY29tbWFuZCBsaW5lCglVc2FnZSAgICBzdHJpbmcgLy8gaGVscCBt ZXNzYWdlCglWYWx1ZSAgICBWYWx1ZSAgLy8gdmFsdWUgYXMgc2V0CglEZWZWYWx1 ZSBzdHJpbmcgLy8gZGVmYXVsdCB2YWx1ZSAoYXMgdGV4dCk7IGZvciB1c2FnZSBt ZXNzYWdlCn0KYGBgCgpJdCdzIHNpbXBseSBhIHN0cnVjdCB0aGF0IGFnZ3JlZ2F0 ZXMgdGhlIG5hbWUsIHVzYWdlLCB2YWx1ZSBhbmQgZGVmYXVsdCB2YWx1ZS4KCjIu IEEgY2hlY2sgaXMgbWFkZSBvbiBhIHVuZXhwb3J0ZWQgbWFwIChgZi5mb3JtYWxg KSB3aGljaCBpcyBwYXJ0IG9mIHRoZQogICBgRmxhZ1NldGAgKGluIHRoaXMgY2Fz ZSBvZiBgQ29tbWFuZExpbmVgKS4KCmBgYGdvCl8sIGFscmVhZHl0aGVyZSA6PSBm LmZvcm1hbFtuYW1lXQpgYGAKClRoZSBgRmxhZ1NldGAgc3RydWN0dXJlIGhhcyBz ZXZlcmFsIHVuZXhwb3J0ZWQgZmllbGRzIG9mIHdoaWNoIHRoZSBgVmFyYApmdW5j dGlvbiB1c2VzIGBuYW1lYCAoYSBzdHJpbmcpIGFuZCBgZm9ybWFsYCAoYSBtYXAg b2YgdHlwZSBgW3N0cmluZ10qRmxhZ2ApCgpBcyBjYW4gYmUgc2VlbiBoZXJlOgoK YGBgZ28KLy8gQSBGbGFnU2V0IHJlcHJlc2VudHMgYSBzZXQgb2YgZGVmaW5lZCBm bGFncy4gVGhlIHplcm8gdmFsdWUgb2YgYSBGbGFnU2V0Ci8vIGhhcyBubyBuYW1l IGFuZCBoYXMgQ29udGludWVPbkVycm9yIGVycm9yIGhhbmRsaW5nLgovLwovLyBG bGFnIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIEZsYWdTZXQuIEFuIGF0 dGVtcHQgdG8gZGVmaW5lIGEgZmxhZyB3aG9zZQovLyBuYW1lIGlzIGFscmVhZHkg aW4gdXNlIHdpbGwgY2F1c2UgYSBwYW5pYy4KdHlwZSBGbGFnU2V0IHN0cnVjdCB7 CgkvLyBVc2FnZSBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYW4gZXJyb3Ig b2NjdXJzIHdoaWxlIHBhcnNpbmcgZmxhZ3MuCgkvLyBUaGUgZmllbGQgaXMgYSBm dW5jdGlvbiAobm90IGEgbWV0aG9kKSB0aGF0IG1heSBiZSBjaGFuZ2VkIHRvIHBv aW50IHRvCgkvLyBhIGN1c3RvbSBlcnJvciBoYW5kbGVyLiBXaGF0IGhhcHBlbnMg YWZ0ZXIgVXNhZ2UgaXMgY2FsbGVkIGRlcGVuZHMKCS8vIG9uIHRoZSBFcnJvckhh bmRsaW5nIHNldHRpbmc7IGZvciB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIGRlZmF1 bHRzCgkvLyB0byBFeGl0T25FcnJvciwgd2hpY2ggZXhpdHMgdGhlIHByb2dyYW0g YWZ0ZXIgY2FsbGluZyBVc2FnZS4KCVVzYWdlIGZ1bmMoKQoKCW5hbWUgICAgICAg ICAgc3RyaW5nCglwYXJzZWQgICAgICAgIGJvb2wKCWFjdHVhbCAgICAgICAgbWFw W3N0cmluZ10qRmxhZwoJZm9ybWFsICAgICAgICBtYXBbc3RyaW5nXSpGbGFnCglh cmdzICAgICAgICAgIFtdc3RyaW5nIC8vIGFyZ3VtZW50cyBhZnRlciBmbGFncwoJ ZXJyb3JIYW5kbGluZyBFcnJvckhhbmRsaW5nCglvdXRwdXQgICAgICAgIGlvLldy aXRlciAvLyBuaWwgbWVhbnMgc3RkZXJyOyB1c2UgT3V0cHV0KCkgYWNjZXNzb3IK fQpgYGAKClRoZSBjaGVjayBpcyBtYWRlIGFzIGNhbiBiZSBzZWVuIHRvIHNlZSBp ZiB0aGUgZmxhZyBpcyByZWRlZmluZWQsIHJldHVybmluZyBhCmRpZmZlcmVudCBl cnJvciBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmxhZ1NldCBoYXMgYW4gZW1w dHkgbmFtZSBvciBub3QuCgpgYGBnbwogICAgaWYgYWxyZWFkeXRoZXJlIHsKCQl2 YXIgbXNnIHN0cmluZwoJCWlmIGYubmFtZSA9PSAiIiB7CgkJCW1zZyA9IGZtdC5T cHJpbnRmKCJmbGFnIHJlZGVmaW5lZDogJXMiLCBuYW1lKQoJCX0gZWxzZSB7CgkJ CW1zZyA9IGZtdC5TcHJpbnRmKCIlcyBmbGFnIHJlZGVmaW5lZDogJXMiLCBmLm5h bWUsIG5hbWUpCgkJfQoJCWZtdC5GcHJpbnRsbihmLk91dHB1dCgpLCBtc2cpCgkJ cGFuaWMobXNnKSAvLyBIYXBwZW5zIG9ubHkgaWYgZmxhZ3MgYXJlIGRlY2xhcmVk IHdpdGggaWRlbnRpY2FsIG5hbWVzCgl9CmBgYAoKMy4gSWYgdGhlIG1hcCBpcyBu b3QgeWV0IGNyZWF0ZWQgKG5pbCkgdGhlbiBhIG1hcHMgaXMgY3JlYXRlZC4KCmBg YGdvCiAgICBpZiBmLmZvcm1hbCA9PSBuaWwgewoJCWYuZm9ybWFsID0gbWFrZSht YXBbc3RyaW5nXSpGbGFnKQoJfQpgYGAKCjQuIEFkZCBhbiBlbnRyeSBpbiB0aGUg bWFwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZsYWcgYXMga2V5IGFuZCB0aGUgcG9p bnRlciB0bwogICB0aGUgZmxhZyBpdHNlbGYgYXMgdmFsdWUuCgpgYGBnbwpmLmZv cm1hbFtuYW1lXSA9IGZsYWcKYGBgCgpOb3cgdGhlIG5leHQgcGllY2Ugb2YgdGhl IHB1enpsZSBjb21lcyBpbiB0aGUgbmV4dCBsaW5lIG9mIG91ciBwcm9ncmFtOgpg ZmxhZy5QYXJzZSgpYC4KCkRpdmluZyBkZWVwIGFnYWluOgoKYGBgZ28KLy8gUGFy c2UgcGFyc2VzIHRoZSBjb21tYW5kLWxpbmUgZmxhZ3MgZnJvbSBvcy5BcmdzWzE6 XS4gTXVzdCBiZSBjYWxsZWQKLy8gYWZ0ZXIgYWxsIGZsYWdzIGFyZSBkZWZpbmVk IGFuZCBiZWZvcmUgZmxhZ3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBwcm9ncmFtLgpm dW5jIFBhcnNlKCkgewoJLy8gSWdub3JlIGVycm9yczsgQ29tbWFuZExpbmUgaXMg c2V0IGZvciBFeGl0T25FcnJvci4KCUNvbW1hbmRMaW5lLlBhcnNlKG9zLkFyZ3Nb MTpdKQp9CmBgYAoKV2UgY2FuIHNlZSB0aGF0IGl0IGNhbGxzIHRoZSBgUGFyc2Vg IG1ldGhvZCBvZiB0aGUgYCpGbGFnU2V0YCBgQ29tbWFuZExpbmVgCndpdGggYWxs IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlLgoKCmBgYGdv Ci8vIFBhcnNlIHBhcnNlcyBmbGFnIGRlZmluaXRpb25zIGZyb20gdGhlIGFyZ3Vt ZW50IGxpc3QsIHdoaWNoIHNob3VsZCBub3QKLy8gaW5jbHVkZSB0aGUgY29tbWFu ZCBuYW1lLiBNdXN0IGJlIGNhbGxlZCBhZnRlciBhbGwgZmxhZ3MgaW4gdGhlIEZs YWdTZXQKLy8gYXJlIGRlZmluZWQgYW5kIGJlZm9yZSBmbGFncyBhcmUgYWNjZXNz ZWQgYnkgdGhlIHByb2dyYW0uCi8vIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBF cnJIZWxwIGlmIC1oZWxwIG9yIC1oIHdlcmUgc2V0IGJ1dCBub3QgZGVmaW5lZC4K ZnVuYyAoZiAqRmxhZ1NldCkgUGFyc2UoYXJndW1lbnRzIFtdc3RyaW5nKSBlcnJv ciB7CglmLnBhcnNlZCA9IHRydWUKCWYuYXJncyA9IGFyZ3VtZW50cwoJZm9yIHsK CQlzZWVuLCBlcnIgOj0gZi5wYXJzZU9uZSgpCgkJaWYgc2VlbiB7CgkJCWNvbnRp bnVlCgkJfQoJCWlmIGVyciA9PSBuaWwgewoJCQlicmVhawoJCX0KCQlzd2l0Y2gg Zi5lcnJvckhhbmRsaW5nIHsKCQljYXNlIENvbnRpbnVlT25FcnJvcjoKCQkJcmV0 dXJuIGVycgoJCWNhc2UgRXhpdE9uRXJyb3I6CgkJCWlmIGVyciA9PSBFcnJIZWxw IHsKCQkJCW9zLkV4aXQoMCkKCQkJfQoJCQlvcy5FeGl0KDIpCgkJY2FzZSBQYW5p Y09uRXJyb3I6CgkJCXBhbmljKGVycikKCQl9Cgl9CglyZXR1cm4gbmlsCn0KYGBg CgpXZSBjYW4gc3VtbWFyaXplIHRoaXMgZnVuY3Rpb24gYXMgcGFyc2luZyBlYWNo IGZsYWcgdW50aWwgYWxsIGZsYWdzIGFyZSBwYXJzZWQKYW5kIGVpdGhlciBlcnJv cnMvcGFuaWNzIGluIGNhc2Ugb2YgYW4gZXJyb3Igb3IgcmV0dXJucyBuaWwgaW4g Y2FzZQp0aGVyZSB3YXNuJ3QgYW55LgoKTW9yZSBzcGVjaWZpY2FsbHkgdGhlIGxv b3AgZW5kcyBpZiBgZXJyYCByZXR1cm5lZCBmcm9tIGBmLnBhcnNlT25lKClgIGlz Cm5pbCwgYW5kIGNvbnRpbnVlcyBpZiB0aGUgYHNlZW5gIHJldHVybmVkIGJ5IGBm LnBhcnNlT25lKClgIGlzIGB0cnVlYC4KCkRvIG5vdGUsIHRoYXQgZXZlbiB0aG91 Z2ggYXJndW1lbnRzIHBhc3NlZCBhcmUgYmVpbmcgYXNzaWduZWQgdG8gYGYuYXJn c2AsIHRoZQpmb3IgbG9vcCBkb2Vzbid0IGV4cGxpY2l0bHkgaXRlcmF0ZSBvdmVy IHRoZW0sIGluc3RlYWQgaXQgYW4gaW5maW5pdGUgbG9vcHMsCmFuZCBgZi5wYXJz ZU9uZSgpYCBoYW5kbGVzIHBhcnNpbmcgYW5kIHNoaWZ0aW5nIHRoZSBhcmd1bWVu dHMgcGFzc2VkLgoKQXMgd2UgY2FuIHNlZSB0aGUgcmVhbCBrZXkgdG8gdW5kZXJz dGF0aW5nIHRoZSBgUGFyc2VgIG1ldGhvZCBpcyBgZi5wYXJzZU9uZSgpYDoKCmBg YGdvCi8vIHBhcnNlT25lIHBhcnNlcyBvbmUgZmxhZy4gSXQgcmVwb3J0cyB3aGV0 aGVyIGEgZmxhZyB3YXMgc2Vlbi4KZnVuYyAoZiAqRmxhZ1NldCkgcGFyc2VPbmUo KSAoYm9vbCwgZXJyb3IpIHsKCWlmIGxlbihmLmFyZ3MpID09IDAgewoJCXJldHVy biBmYWxzZSwgbmlsCgl9CglzIDo9IGYuYXJnc1swXQoJaWYgbGVuKHMpIDwgMiB8 fCBzWzBdICE9ICctJyB7CgkJcmV0dXJuIGZhbHNlLCBuaWwKCX0KCW51bU1pbnVz ZXMgOj0gMQoJaWYgc1sxXSA9PSAnLScgewoJCW51bU1pbnVzZXMrKwoJCWlmIGxl bihzKSA9PSAyIHsgLy8gIi0tIiB0ZXJtaW5hdGVzIHRoZSBmbGFncwoJCQlmLmFy Z3MgPSBmLmFyZ3NbMTpdCgkJCXJldHVybiBmYWxzZSwgbmlsCgkJfQoJfQoJbmFt ZSA6PSBzW251bU1pbnVzZXM6XQoJaWYgbGVuKG5hbWUpID09IDAgfHwgbmFtZVsw XSA9PSAnLScgfHwgbmFtZVswXSA9PSAnPScgewoJCXJldHVybiBmYWxzZSwgZi5m YWlsZigiYmFkIGZsYWcgc3ludGF4OiAlcyIsIHMpCgl9CgoJLy8gaXQncyBhIGZs YWcuIGRvZXMgaXQgaGF2ZSBhbiBhcmd1bWVudD8KCWYuYXJncyA9IGYuYXJnc1sx Ol0KCWhhc1ZhbHVlIDo9IGZhbHNlCgl2YWx1ZSA6PSAiIgoJZm9yIGkgOj0gMTsg aSA8IGxlbihuYW1lKTsgaSsrIHsgLy8gZXF1YWxzIGNhbm5vdCBiZSBmaXJzdAoJ CWlmIG5hbWVbaV0gPT0gJz0nIHsKCQkJdmFsdWUgPSBuYW1lW2krMTpdCgkJCWhh c1ZhbHVlID0gdHJ1ZQoJCQluYW1lID0gbmFtZVswOmldCgkJCWJyZWFrCgkJfQoJ fQoJbSA6PSBmLmZvcm1hbAoJZmxhZywgYWxyZWFkeXRoZXJlIDo9IG1bbmFtZV0g Ly8gQlVHCglpZiAhYWxyZWFkeXRoZXJlIHsKCQlpZiBuYW1lID09ICJoZWxwIiB8 fCBuYW1lID09ICJoIiB7IC8vIHNwZWNpYWwgY2FzZSBmb3IgbmljZSBoZWxwIG1l c3NhZ2UuCgkJCWYudXNhZ2UoKQoJCQlyZXR1cm4gZmFsc2UsIEVyckhlbHAKCQl9 CgkJcmV0dXJuIGZhbHNlLCBmLmZhaWxmKCJmbGFnIHByb3ZpZGVkIGJ1dCBub3Qg ZGVmaW5lZDogLSVzIiwgbmFtZSkKCX0KCglpZiBmdiwgb2sgOj0gZmxhZy5WYWx1 ZS4oYm9vbEZsYWcpOyBvayAmJiBmdi5Jc0Jvb2xGbGFnKCkgeyAvLyBzcGVjaWFs IGNhc2U6IGRvZXNuJ3QgbmVlZCBhbiBhcmcKCQlpZiBoYXNWYWx1ZSB7CgkJCWlm IGVyciA6PSBmdi5TZXQodmFsdWUpOyBlcnIgIT0gbmlsIHsKCQkJCXJldHVybiBm YWxzZSwgZi5mYWlsZigiaW52YWxpZCBib29sZWFuIHZhbHVlICVxIGZvciAtJXM6 ICV2IiwgdmFsdWUsIG5hbWUsIGVycikKCQkJfQoJCX0gZWxzZSB7CgkJCWlmIGVy ciA6PSBmdi5TZXQoInRydWUiKTsgZXJyICE9IG5pbCB7CgkJCQlyZXR1cm4gZmFs c2UsIGYuZmFpbGYoImludmFsaWQgYm9vbGVhbiBmbGFnICVzOiAldiIsIG5hbWUs IGVycikKCQkJfQoJCX0KCX0gZWxzZSB7CgkJLy8gSXQgbXVzdCBoYXZlIGEgdmFs dWUsIHdoaWNoIG1pZ2h0IGJlIHRoZSBuZXh0IGFyZ3VtZW50LgoJCWlmICFoYXNW YWx1ZSAmJiBsZW4oZi5hcmdzKSA+IDAgewoJCQkvLyB2YWx1ZSBpcyB0aGUgbmV4 dCBhcmcKCQkJaGFzVmFsdWUgPSB0cnVlCgkJCXZhbHVlLCBmLmFyZ3MgPSBmLmFy Z3NbMF0sIGYuYXJnc1sxOl0KCQl9CgkJaWYgIWhhc1ZhbHVlIHsKCQkJcmV0dXJu IGZhbHNlLCBmLmZhaWxmKCJmbGFnIG5lZWRzIGFuIGFyZ3VtZW50OiAtJXMiLCBu YW1lKQoJCX0KCQlpZiBlcnIgOj0gZmxhZy5WYWx1ZS5TZXQodmFsdWUpOyBlcnIg IT0gbmlsIHsKCQkJcmV0dXJuIGZhbHNlLCBmLmZhaWxmKCJpbnZhbGlkIHZhbHVl ICVxIGZvciBmbGFnIC0lczogJXYiLCB2YWx1ZSwgbmFtZSwgZXJyKQoJCX0KCX0K CWlmIGYuYWN0dWFsID09IG5pbCB7CgkJZi5hY3R1YWwgPSBtYWtlKG1hcFtzdHJp bmddKkZsYWcpCgl9CglmLmFjdHVhbFtuYW1lXSA9IGZsYWcKCXJldHVybiB0cnVl LCBuaWwKfQpgYGAKCldob2EhIFRoYXQncyBhIGxvdCB0byB1bnBhY2suIEZvcnR1 bmF0ZWx5IHdlIGRvbid0IG5lZWQgdG8gYW5hbHl6ZSB0aGUgd2hvbGUKZnVuY3Rp b24gdG8gZ2V0IHRvIHRoZSBzaW5nbGUgYW5kIGRvdWJsZSBkYXNoZXMgbG9naWMs IGJ1dCBsZXQncyB0YWtlIGl0CnBpZWNlbWVhbDoKCjEuIENoZWNrIGlmIHRoZXJl IGFyZSBubyBhcmd1bWVudHM6CgpgYGBnbwogICAgaWYgbGVuKGYuYXJncykgPT0g MCB7CgkJcmV0dXJuIGZhbHNlLCBuaWwKCX0KYGBgCgpTbyBpZiB0aGVyZSBhcmUg bm8gYXJndW1lbnRzIGl0IHNpbXBseSBlbmRzIHBhcnNpbmcuCgoKMi4gR2V0dGlu ZyB0aGUgZmlyc3QgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICh0aGUgYWN0dWFsIG9w dGlvbi9mbGFnIG5hbWUpCgpgYGBnbwpzIDo9IGYuYXJnc1swXQpgYGAKClNpbmNl IGBmLmFyZ3NgIHdhcyBhbGwgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgd2l0 aCB3aG9tIHRoZSBleGVjdXRhYmxlIHdhcwpjYWxsZWQgKHRoaXMgaXMgc2ltcGx5 IGFzc2lnbmluZyB0byBgc2AgdGhlIGZpcnN0IGNvbW1hbmQgbGluZSBhcmd1bWVu dCkuCkxhdGVyIHdlIHdpbGwgc2VlIHRoYXQgdGhlIGBmLmFyZ3NgIHNsaWNlIGdl dHMgdXBkYXRlZCBpbiB0aGlzIGZ1bmN0aW9uLCBzbwp0aGF0IGl0IHdlIGFkdmFu Y2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgc2Vlbi4KCkluIG91ciBleGFt cGxlIHByb2dyYW0sIHRoaXMgd291bGQgbWFrZToKCmBgYGdvCnMgOj0gIi12ZXJi b3NlIgpgYGAKCjMuICoqVGhlIGFjdHVhbCBleHBsYW5hdGlvbiBvZiB3aHkgdGhl IHNob3J0IGFuZCBsb25nIG9wdGlvbnMgd29yayoqCgpgYGBnbwogICAgaWYgbGVu KHMpIDwgMiB8fCBzWzBdICE9ICctJyB7CgkJcmV0dXJuIGZhbHNlLCBuaWwKCX0K CW51bU1pbnVzZXMgOj0gMQoJaWYgc1sxXSA9PSAnLScgewoJCW51bU1pbnVzZXMr KwoJCWlmIGxlbihzKSA9PSAyIHsgLy8gIi0tIiB0ZXJtaW5hdGVzIHRoZSBmbGFn cwoJCQlmLmFyZ3MgPSBmLmFyZ3NbMTpdCgkJCXJldHVybiBmYWxzZSwgbmlsCgkJ fQoJfQoJbmFtZSA6PSBzW251bU1pbnVzZXM6XQpgYGAKClRvIGV4cGxhaW4gdGhp cyBwYXJ0IGxldCdzIGNvbnRpbnVlIHdpdGggdGhlIGZsYWcgaW4gb3VyIGV4YW1w bGUgcHJvZ3JhbSBgc2AsCmJ1dCBsZXQncyBhc3N1bWUgd2UgaGF2ZSBpbnZva2Vk IGl0IHdpdGggMiBkYXNoZXM6CgpgYGBnbwpzIDo9ICItLXZlcmJvc2UiCmBgYAoK VGhlIGZpcnN0IGlmIHJldHVybnMgaWYgdGhlIGxlbmd0aCBvZiBgc2AgaXMgMSBv ciBub3QgaWYgdGhlIGZpcnN0IHJ1bmUKKGNoYXJhY3RlcikgaXMgbm90IGEgZGFz aC4gTm9uZSBvZiB0aGVzZSBpcyBvdXIgY2FzZS4KClNpbmNlIHdlIGRvbid0IGVu dGVyIHRoZSBib2R5IG9mIHRoZSBpZiBzdGF0ZW1lbnQgdGhlIGZpcnN0IHJ1bmUg Km11c3QqIGJlIGEKZGFzaCwgb3IgbWludXMgYXMgaXQgaXMgY2FsbGVkIGluIHRo ZSBjb2RlLCB0aGVuIHRoZSBgbnVtTWludXNlc2AgaXMgc2V0IHRvIDEuCgpUaGUg c2Vjb25kIGlmIGNoZWNrcyB3aGV0aGVyIHRoZSBzZWNvbmQgY2hhcmFjdGVyIG9m IHRoZSBzdHJpbmcgaXMgYSBkYXNoIGAtYAphbmQgaWYgaXQgaXMgaXQgaW5jcmVt ZW50cyB0aGUgYG51bU1pbnVzZXNgIHRvIDIuIElmIGl0IGlzbid0IHRoZW4gdGhl IGJvZHkgb2YKdGhlIGlmIGlzIHNraXBwZWQuCgpUaGVuIGNoZWNrcyBpZiBzIGNv bnNpc3Qgb2YganVzdCB0aGF0OiB0d28gZGFzaGVzIChgLS1gKSwgc2luY2UgdGhl IHR3byBkYXNoZXMKaXMgdGhlIGZsYWdzIHRlcm1pbmF0b3IgYXMgd2UgY2FuIHNl ZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbHNvIGZhbHNlLCBhbmQgbmlsCmFzIGJl Zm9yZS4KCkFmdGVyIHRoaXMgdGhlIGBuYW1lIDo9IHNbbnVtTWludXNlczpdYCBz bGljZXMgdGhlIHN0cmluZyBzbyBhcyB0byBvbmx5IHRyaW0KdGhlIGRhc2hlcyBh bmQgbGVhdmUgb25seSB0aGUgbmFtZSBvZiB0aGUgZmxhZy4KCmkuZTogYG5hbWUg Oj0gInZlcmJvc2UiYAoKQW5kIHRoaXMgaXMgdGhlIHJlYXNvbiB3aHkgdGhlIHN0 YW5kYXJkIGxpYnJhcnkgYGZsYWdgIHBhY2thZ2Ugd29ya3MgZm9yIGJvdGgKc2lu Z2xlIG9yIGRvdWJsZSBkYXNoZXMuCgpOb3cgaWYgeW91J3ZlIG1hZGUgaXQgdGhp cyBmYXIgKmFuZCogeW91J3JlIGFsc28gbGVhcm5pbmcgdGhpcyB3YXMgYWxzbyBu ZXdzCnRvIHlvdSwgdGhlbiBJJ20gYWZyYWlkIHRoaXMgd2Fzbid0IGEgYmlnIHJl dmVhbCBhbmQgaXMgYWN0dWFsbHkgZXhwZWN0ZWQuCgoqKipUaGlzIGlzIGFjdHVh bGx5IGRvY3VtZW50ZWQgYmVoYXZpb3IqKiosIHRoZSB0aGluZyBpcyB0aGF0IGlz IG5vdCBhY3R1YWxseSAqKndlbGwKZG9jdW1lbnRlZCoqLiBGcm9tIHRoZQpbZG9j c10oaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9mbGFnLyNoZHItQ29tbWFuZF9saW5l X2ZsYWdfc3ludGF4KSwgd2UgY2FuIHNlZQp0aGF0IGl0IHNob3dzIDMgZXhhbXBs ZXMgd2l0aCBhIHNpbmdsZSBkYXNoIGJ1dCB0aGUgdGV4dCBiZWxvdyBtZW50aW9u cyB0aGF0CmRvdWJsZSBkYXNoZXMgYXJlIGFsc28gcG9zc2libGUuCgohW3NjcmVl bnNob3RfZmxhZ19wa2dfZ29dKC4uLy4uL2ltZy9zY3JlZW5zaG90X2ZsYWdfcGtn X2dvLnBuZykKClNvLCB5ZWFoLCBSVEZNIGFtIEkgcmlnaHQ/CgpPSywgZ3JlYXQu IEJ1dCB0aGlzIHN0aWxsIGRvZXNuJ3QgYW5zd2VyIHRoZSBxdWVzdGlvbjogKipJ cyBpdCBwb3NzaWJsZSB0bwpoYXZlIHNob3J0L2xvbmcgb3B0aW9ucyB1c2luZyBq dXN0IGZsYWcgcGFja2FnZT8qKgoKV2VsbCB3aXRoIHRoaXMgbmV3Zm91bmQga25v d2xlZGdlIG9mIGhvdyBmbGFncyBhcmUgbWFkZSBhbmQga2VwdCBpbiB0aGUKYCpG bGFnU2V0YCB0aGlzIHNob3VsZCBiZSBub3cgYSBiaXQgbW9yZSBzdHJhaWdodGZv cndhcmQsIGJ1dCBsZXQncyBjaGVjayBob3cgaXQKaXMgZG9uZSBpbgpbYWdlXSho dHRwczovL2dpdGh1Yi5jb20vRmlsb1NvdHRpbGUvYWdlL2Jsb2IvbWFzdGVyL2Nt ZC9hZ2UvYWdlLmdvI0w5Ny1MMTAyKQoKYGBgZ28KCWZsYWcuQm9vbFZhcigmZGVj cnlwdEZsYWcsICJkIiwgZmFsc2UsICJkZWNyeXB0IHRoZSBpbnB1dCIpCglmbGFn LkJvb2xWYXIoJmRlY3J5cHRGbGFnLCAiZGVjcnlwdCIsIGZhbHNlLCAiZGVjcnlw dCB0aGUgaW5wdXQiKQoJZmxhZy5Cb29sVmFyKCZlbmNyeXB0RmxhZywgImUiLCBm YWxzZSwgImVuY3J5cHQgdGhlIGlucHV0IikKCWZsYWcuQm9vbFZhcigmZW5jcnlw dEZsYWcsICJlbmNyeXB0IiwgZmFsc2UsICJlbmNyeXB0IHRoZSBpbnDrdXQiKQoJ ZmxhZy5Cb29sVmFyKCZwYXNzRmxhZywgInAiLCBmYWxzZSwgInVzZSBhIHBhc3Nw aHJhc2UiKQoJZmxhZy5Cb29sVmFyKCZwYXNzRmxhZywgInBhc3NwaHJhc2UiLCBm YWxzZSwgInVzZSBhIHBhc3NwaHJhc2UiKQpgYGAKCkFzIGNhbiBiZSBzZWVuIGFs bCB0aGF0IGl0J3MgbmVlZGVkIGlzIHRvIGFzc2lnbiB0byB0aGUgc2FtZSB2YXJp YWJsZSB0d28KZmxhZ3M6IG9uZSB3aXRoIGEgc2luZ2xlIGxldHRlciBhbmQgb25l IHdpdGggYSB3b3JkLiBPZiBjb3Vyc2UgdGhpcyBkb2Vzbid0CnByZXZlbnQgYW55 b25lIGZyb20gdXNpbmcgdGhlIHNpbmdsZSBkYXNoIHdpdGggdGhlIHdvcmQgZm9y bSBvciB0aGUgZG91YmxlCmRhc2ggd2l0aCB0aGUgc2luZ2xlIGxldHRlciwgYnV0 IGlmIHRoZSBlcmdvbm9taWNzIGFuZCByZXN0cmljdGluZyB0aGUgdXNhZ2VzCmFy ZSByZWFsbHkgaW1wb3J0YW50LCB5b3UgY2FuIGFsd2F5cyBtb2RpZnkgYGZsYWcu VXNhZ2VgIHNvIHRoYXQgdGhlc2UgdHdvCmNhc2VzIGFyZSBkb2N1bWVudGVkLCBb YXMgaXQgaXMgZG9uZSB3aXRoCmBhZ2VgXShodHRwczovL2dpdGh1Yi5jb20vRmls b1NvdHRpbGUvYWdlL2Jsb2IvbWFzdGVyL2NtZC9hZ2UvYWdlLmdvI0wzNSkuCgoK YGBgZ28KY29uc3QgdXNhZ2UgPSBgVXNhZ2U6CiAgICBhZ2UgWy0tZW5jcnlwdF0g KC1yIFJFQ0lQSUVOVCB8IC1SIFBBVEgpLi4uIFstLWFybW9yXSBbLW8gT1VUUFVU XSBbSU5QVVRdCiAgICBhZ2UgWy0tZW5jcnlwdF0gLS1wYXNzcGhyYXNlIFstLWFy bW9yXSBbLW8gT1VUUFVUXSBbSU5QVVRdCiAgICBhZ2UgLS1kZWNyeXB0IFstaSBQ QVRIXS4uLiBbLW8gT1VUUFVUXSBbSU5QVVRdCk9wdGlvbnM6CiAgICAtZSwgLS1l bmNyeXB0ICAgICAgICAgICAgICAgRW5jcnlwdCB0aGUgaW5wdXQgdG8gdGhlIG91 dHB1dC4gRGVmYXVsdCBpZiBvbWl0dGVkLgogICAgLWQsIC0tZGVjcnlwdCAgICAg ICAgICAgICAgIERlY3J5cHQgdGhlIGlucHV0IHRvIHRoZSBvdXRwdXQuCiAgICAt bywgLS1vdXRwdXQgT1VUUFVUICAgICAgICAgV3JpdGUgdGhlIHJlc3VsdCB0byB0 aGUgZmlsZSBhdCBwYXRoIE9VVFBVVC4KICAgIC1hLCAtLWFybW9yICAgICAgICAg ICAgICAgICBFbmNyeXB0IHRvIGEgUEVNIGVuY29kZWQgZm9ybWF0LgogICAgLXAs IC0tcGFzc3BocmFzZSAgICAgICAgICAgIEVuY3J5cHQgd2l0aCBhIHBhc3NwaHJh c2UuCmBgYAoKV2UgY2FuIHRlc3QgaXQgaW4gb3VyIHRpbnkgZXhhbXBsZSBwcm9n cmFtIGJ5IGFkZGluZyBhbiBleHRyYSBsaW5lIHdpdGggYCJ2ImAKYXMgZmxhZyBu YW1lIHN1Y2ggdGhhdCBpdCBsb29rcyBsaWtlIHRoaXM6CgoKYGBgZ28KcGFja2Fn ZSBtYWluCgppbXBvcnQgKAogICAgImZtdCIKICAgICJmbGFnIgopCgpmdW5jIG1h aW4oKSB7CiAgICB2YXIgdmVyYm9zZSBib29sCiAgICBmbGFnLkJvb2xWYXIoJnZl cmJvc2UsICJ2ZXJib3NlIiwgZmFsc2UsICJ2ZXJib3NlIG91dHB1dCIpCiAgICBm bGFnLkJvb2xWYXIoJnZlcmJvc2UsICJ2IiwgZmFsc2UsICJ2ZXJib3NlIG91dHB1 dCIpCiAgICBmbGFnLlBhcnNlKCkKICAgIGlmIHZlcmJvc2UgewogICAgICAgIGZt dC5QcmludGxuKCJ2ZXJib3NlIGlzIG9uIikKICAgIH0KfQpgYGAKCkRvbid0IGZv cmdldCB0byBidWlsZCBpdCBhZnRlciBtb2RpZnlpbmcgaXQuCgpJbnZva2luZyBp dCB3aXRoIGAtdmAsIGAtLXZgIGFuZCBvZiBjb3Vyc2UgdGhlIG90aGVyIHR3byBj YXNlcyB3b3JrcyBhcyB3ZWxsOgoKYGBgc2gKJCAuL3VzaW5nX2ZsYWcgLXYKdmVy Ym9zZSBpcyBvbgokIC4vdXNpbmdfZmxhZyAtLXZlcmJvc2UKdmVyYm9zZSBpcyBv bgokIC4vdXNpbmdfZmxhZyAtLXYKdmVyYm9zZSBpcyBvbgokIC4vdXNpbmdfZmxh ZyAtdmVyYm9zZQp2ZXJib3NlIGlzIG9uCmBgYAoKQW5kIG9mIGNvdXJzZSBpbnZv a2luZyBpdCB3aXRoIHRocmVlIChvciBtb3JlIGRhc2hlcykgZGFzaGVzIHJlc3Vs dHMgaW4gYQplcnJvcjoKCmBgYHNoCiQgLi91c2luZ19mbGFnIC0tLXZlcmJvc2UK YmFkIGZsYWcgc3ludGF4OiAtLS12ZXJib3PqZQpVc2FnZSBvZiAuL3VzaW5nX2Zs YWc6CiAgLXYgICAgdmVyYm9zZSBvdXRwdXQKICAtdmVyYm9zZQogICAgICAgIHZl cmJvc2Ugb3V0cHV0CiQKYGBgCgpGb3IgY29tcGxldGlvbidzIHNha2Ugd2UnbGwg bW9kaWZ5IHRoZSBgZmxhZy5Vc2FnZWAgc28gdGhhdCB3ZSBoYXZlIGEgbmVhdGVy CmVycm9yIHdoZW4gd2UgZWl0aGVyIHByaW50IGhlbHAgb3IgaGF2ZSBhbiBlcnJv ciBwYXJzaW5nIGZsYWdzOgoKYGBgZ28KcGFja2FnZSBtYWluCgppbXBvcnQgKAoJ ImZsYWciCgkiZm10IgopCgpjb25zdCB1c2FnZSA9IGBVc2FnZSBvZiB1c2luZ19m bGFnOgogIC12LCAtLXZlcmJvc2UgdmVyYm9zZSBvdXRwdXQKICAtaCwgLS1oZWxw IHByaW50cyBoZWxwIGluZm9ybWF0aW9uIApgCgpmdW5jIG1haW4oKSB7Cgl2YXIg dmVyYm9zZSBib29sCglmbGFnLkJvb2xWYXIoJnZlcmJvc2UsICJ2ZXJib3NlIiwg ZmFsc2UsICJ2ZXJib3NlIG91dHB1dCIpCglmbGFnLkJvb2xWYXIoJnZlcmJvc2Us ICJ2IiwgZmFsc2UsICJ2ZXJib3NlIG91dHB1dCIpCglmbGFnLlVzYWdlID0gZnVu YygpIHsgZm10LlByaW50KHVzYWdlKSB9CglmbGFnLlBhcnNlKCkKCWlmIHZlcmJv c2UgewoJCWZtdC5QcmludGxuKCJ2ZXJib3NlIGlzIG9uIikKCX0KfQpgYGAKCndo aWNoIG91dHB1dHM6CgpgYGBzaAokIC4vdXNpbmdfZmxhZyAtLS12ZXJib3NlCmJh ZCBmbGFnIHN5bnRheDogLS0tdmVyYm9zZQpVc2FnZSBvZiB1c2luZ19mbGFnOgog IC12LCAtLXZlcmJvc2UgdmVyYm9zZSBvdXRwdXQKICAtaCwgLS1oZWxwICAgIHBy aW50cyBoZWxwIGluZm9ybWF0aW9uCiQKYGBgCgpJIHRoaW5rIHRoZSBtYWluIHJl YXNvbiBwZW9wbGUgYXNzdW1lIHRoaXMgaXNuJ3QgcG9zc2libGUgaXMgYmVjYXVz ZSB0aGUKZmxhZyBkb2N1bWVudGF0aW9uIGRvZXNuJ3QgKioqc2hvdyoqKiB0aGF0 IHRoZSBvcHRpb25zIGNvdWxkIGJlIHBhc3NlZCB3aXRoCipzaW5nbGUgb3IgZG91 YmxlIGRhc2gqLiBUaGUgZmFjdCB0aGF0IGJ5IGZhciBtb3N0IHBlb3BsZeggdGhh dCB3YW50IGEgQ0xJIHRoYXQKaGFuZGxlcyBmbGFncyBjbGVhbmluZyB1c2UgW3Nw ZjEzL2NvYnJhXShodHRwczovL3d3dy5naXRodWIuY29tL3NwZjEzL2NvYnJhKQpk b2Vzbid0IGhlbHAgZWl0aGVyLiBBbHNvIGl0IGRvZXNuJ3QgaGVscCB0aGF0IGlz IGEgaGlnaCBxdWFsaXR5IHBhY2thZ2Ugd2l0aApuaWNlIGVyZ29ub21pY3MuCgpC dXQgYXMgeW91IGNhbiBzZWUsIGl0J3Mgbm90IGVzc2VudGlhbCB0byB1c2UgaW4g b3JkZXIgdG8gaGF25mUgcmVndWxhcgpVbml4LXN0eWxlIGNvbW1hbmQgbGluZSBv cHRpb25zLgoKVGhhdCdzIGFsbCBmb2xrcy4gSGHjcHB5IGhhY2viaW5nIeAKAMLA XAQAAQgAEAUCYrDjHQkQXK32/a0WXi0AAJ5uCABgiYF9L5FxhoKB4mO3KUTeJ5jA ZXe9IlPRq6mwBNXpVFv2e11HW0DJbbzBJsyll+C4b+LNhVRHETyBKEFXWJTVIRa4 FqWcR3YSrDBilVx0IQVwsmipGaLdobVapB6S1fRhFU1MuxyqkfP59u+nAl4wpOeP 3y8ZeAoiqXxD6B72DJpy0e83xs3Qm/qPddccDoQJ4r0by4idgX4RzquSaH8qtDMo QbXXOsr8qcf/CDey37crZ8/TiX2dm3MEFgJIX0+29mIAO2QyzVvexqpPrk888Cux 7xzRdNV6KazW2qQvvQkkwdIElquTv+2pAktxhBRstHHf1LTH1qDUPV+naQ83 =PqQO -----END PGP MESSAGE-----