YnppcDIoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnppcDIoMSkKCgoKTghOQQhBTQhNRQhFCiAgICAgICBiemlwMiwgYnVuemlwMiAtIGEgYmxvY2stc29ydGluZyBmaWxlIGNvbXByZXNzb3IsIHYxLjAuMgogICAgICAgYnpjYXQgLSBkZWNvbXByZXNzZXMgZmlsZXMgdG8gc3Rkb3V0CiAgICAgICBiemlwMnJlY292ZXIgLSByZWNvdmVycyBkYXRhIGZyb20gZGFtYWdlZCBiemlwMiBmaWxlcwoKClMIU1kIWU4ITk8IT1AIUFMIU0kISVMIUwogICAgICAgYghiegh6aQhpcAhwMggyIFsgLQgtYwhjZAhkZghmawhrcQhxcwhzdAh0dgh2egh6VghWTAhMMQgxMggyMwgzNAg0NQg1Ngg2Nwg3OAg4OQg5IF0gWyBfCGZfCGlfCGxfCGVfCG5fCGFfCG1fCGVfCHMgXwguXwguXwguICBdCiAgICAgICBiCGJ1CHVuCG56CHppCGlwCHAyCDIgWyAtCC1mCGZrCGt2CHZzCHNWCFZMCEwgXSBbIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZV8IcyBfCC5fCC5fCC4gIF0KICAgICAgIGIIYnoIemMIY2EIYXQIdCBbIC0ILXMIcyBdIFsgXwhmXwhpXwhsXwhlXwhuXwhhXwhtXwhlXwhzIF8ILl8ILl8ILiAgXQogICAgICAgYghiegh6aQhpcAhwMggycghyZQhlYwhjbwhvdgh2ZQhlcghyIF8IZl8IaV8IbF8IZV8Ibl8IYV8IbV8IZQoKCkQIREUIRVMIU0MIQ1IIUkkISVAIUFQIVEkISU8IT04ITgogICAgICAgXwhiXwh6XwhpXwhwXwgyICBjb21wcmVzc2VzICBmaWxlcyAgdXNpbmcgIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2sKICAgICAgIHNvcnRpbmcgdGV4dCBjb21wcmVzc2lvbiBhbGdvcml0aG0sICBhbmQgIEh1ZmZtYW4gIGNvZGluZy4KICAgICAgIENvbXByZXNzaW9uICBpcyAgZ2VuZXJhbGx5ICBjb25zaWRlcmFibHkgIGJldHRlciB0aGFuIHRoYXQKICAgICAgIGFjaGlldmVkIGJ5IG1vcmUgY29udmVudGlvbmFsIExaNzcvTFo3OC1iYXNlZCBjb21wcmVzc29ycywKICAgICAgIGFuZCAgYXBwcm9hY2hlcyAgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBQUE0gZmFtaWx5IG9mIHN0Ya0KICAgICAgIHRpc3RpY2FsIGNvbXByZXNzb3JzLgoKICAgICAgIFRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVsaWJlcmF0ZWx5IHZlcnkgc2ltaWxhciAgdG8KICAgICAgIHRob3NlIG9mIF8IR18ITl8IVSBfCGdfCHpfCGlfCHBfCCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuCgogICAgICAgXwhiXwh6XwhpXwhwXwgyICBleHBlY3RzICBhIGxpc3Qgb2YgZmlsZSBuYW1lcyB0byBhY2NvbXBhbnkgdGhlIGNvba0KICAgICAgIG1hbmQtbGluZSBmbGFncy4gIEVhY2ggZmlsZSBpcyByZXBsYWNlZCAgYnkgIGEgIGNvbXByZXNzZWQKICAgICAgIHZlcnNpb24gIG9mICBpdHNlbGYsICB3aXRoICB0aGUgIG5hbWUgIm9yaWdpbmFsX25hbWUuYnoyIi4KICAgICAgIEVhY2ggY29tcHJlc3NlZCBmaWxlIGhhcyB0aGUgc2FtZSBtb2RpZmljYXRpb24gZGF0ZSwgIHBlcq0KICAgICAgIG1pc3Npb25zLCBhbmQsIHdoZW4gcG9zc2libGUsIG93bmVyc2hpcCBhcyB0aGUgY29ycmVzcG9uZK0KICAgICAgIGluZyBvcmlnaW5hbCwgc28gdGhhdCB0aGVzZSBwcm9wZXJ0aWVzICBjYW4gIGJlICBjb3JyZWN0bHkKICAgICAgIHJlc3RvcmVkICBhdCAgZGVjb21wcmVzc2lvbiAgdGltZS4gICBGaWxlIG5hbWUgaGFuZGxpbmcgaXMKICAgICAgIG5haXZlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXJlIGlzIG5vIG1lY2hhbmlzbSBmb3IgcHJlc2Vydq0KICAgICAgIGluZyAgb3JpZ2luYWwgZmlsZSBuYW1lcywgcGVybWlzc2lvbnMsIG93bmVyc2hpcHMgb3IgZGF0ZXMKICAgICAgIGluIGZpbGVzeXN0ZW1zIHdoaWNoIGxhY2sgdGhlc2UgY29uY2VwdHMsIG9yIGhhdmUgIHNlcmlvdXMKICAgICAgIGZpbGUgbmFtZSBsZW5ndGggcmVzdHJpY3Rpb25zLCBzdWNoIGFzIE1TLURPUy4KCiAgICAgICBfCGJfCHpfCGlfCHBfCDIgIGFuZCAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgYnkgZGVmYXVsdCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCiAgICAgICBmaWxlcy4gIElmIHlvdSB3YW50IHRoaXMgdG8gaGFwcGVuLCBzcGVjaWZ5IHRoZSAtZiBmbGFnLgoKICAgICAgIElmIG5vIGZpbGUgbmFtZXMgIGFyZSAgc3BlY2lmaWVkLCAgXwhiXwh6XwhpXwhwXwgyICBjb21wcmVzc2VzICBmcm9tCiAgICAgICBzdGFuZGFyZCAgaW5wdXQgIHRvICBzdGFuZGFyZCBvdXRwdXQuICBJbiB0aGlzIGNhc2UsIF8IYl8Iel8IaV8IcF8IMgogICAgICAgd2lsbCBkZWNsaW5lIHRvIHdyaXRlIGNvbXByZXNzZWQgb3V0cHV0IHRvIGEgdGVybWluYWwsICBhcwogICAgICAgdGhpcyAgd291bGQgIGJlICBlbnRpcmVseSAgaW5jb21wcmVoZW5zaWJsZSAgYW5kIHRoZXJlZm9yZQogICAgICAgcG9pbnRsZXNzLgoKICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiAob3IgXwhiXwh6XwhpXwhwXwgyIF8ILV8IZF8IKSBkZWNvbXByZXNzZXMgIGFsbCAgc3BlY2lmaWVkICBmaWxlcy4KICAgICAgIEZpbGVzIHdoaWNoIHdlcmUgbm90IGNyZWF0ZWQgYnkgXwhiXwh6XwhpXwhwXwgyIHdpbGwgYmUgZGV0ZWN0ZWQgYW5kCiAgICAgICBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzc3VlZC4gIF8IYl8Iel8IaV8IcF8IMiAgYXR0ZW1wdHMgIHRvICBndWVzcwogICAgICAgdGhlICBmaWxlbmFtZSAgZm9yICB0aGUgZGVjb21wcmVzc2VkIGZpbGUgZnJvbSB0aGF0IG9mIHRoZQogICAgICAgY29tcHJlc3NlZCBmaWxlIGFzIGZvbGxvd3M6CgogICAgICAgICAgICAgIGZpbGVuYW1lLmJ6MiAgICBiZWNvbWVzICAgZmlsZW5hbWUKICAgICAgICAgICAgICBmaWxlbmFtZS5ieiAgICAgYmVjb21lcyAgIGZpbGVuYW1lCiAgICAgICAgICAgICAgZmlsZW5hbWUudGJ6MiAgIGJlY29tZXMgICBmaWxlbmFtZS50YXIKICAgICAgICAgICAgICBmaWxlbmFtZS50YnogICAgYmVjb21lcyAgIGZpbGVuYW1lLnRhcgogICAgICAgICAgICAgIGFueW90aGVybmFtZSAgICBiZWNvbWVzICAgYW55b3RoZXJuYW1lLm91dAoKICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGVuZCBpbiBvbmUgb2YgdGhlIHJlY29nbmlzZWQgZW5kaW5ncywKICAgICAgIF8ILl8IYl8Iel8IMl8ILCAgXwguXwhiXwh6XwgsICBfCC5fCHRfCGJfCHpfCDIgb3IgXwguXwh0XwhiXwh6XwgsIF8IYl8Iel8IaV8IcF8IMiBjb21wbGFpbnMgdGhhdCBpdCBjYW5ub3QKICAgICAgIGd1ZXNzIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdXNlcyB0aGUgb3JpZ2luYWwKICAgICAgIG5hbWUgd2l0aCBfCC5fCG9fCHVfCHQgYXBwZW5kZWQuCgogICAgICAgQXMgIHdpdGggY29tcHJlc3Npb24sIHN1cHBseWluZyBubyBmaWxlbmFtZXMgY2F1c2VzIGRlY29trQogICAgICAgcHJlc3Npb24gZnJvbSBzdGFuZGFyZCBpbnB1dCB0byBzdGFuZGFyZCBvdXRwdXQuCgogICAgICAgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIHdpbGwgY29ycmVjdGx5IGRlY29tcHJlc3MgYSBmaWxlIHdoaWNoIGlzIHRoZSBjb26tCiAgICAgICBjYXRlbmF0aW9uIG9mIHR3byBvciBtb3JlIGNvbXByZXNzZWQgZmlsZXMuICBUaGUgcmVzdWx0IGlzCiAgICAgICB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB1bmNvbXByZXNzZWQgZmlsZXMuCiAgICAgICBJbnRlZ3JpdHkgdGVzdGluZyAoLXQpIG9mIGNvbmNhdGVuYXRlZCBjb21wcmVzc2VkIGZpbGVzIGlzCiAgICAgICBhbHNvIHN1cHBvcnRlZC4KCiAgICAgICBZb3UgY2FuIGFsc28gY29tcHJlc3Mgb3IgZGVjb21wcmVzcyBmaWxlcyB0byB0aGUgIHN0YW5kYXJkCiAgICAgICBvdXRwdXQgIGJ5IGdpdmluZyB0aGUgLWMgZmxhZy4gIE11bHRpcGxlIGZpbGVzIG1heSBiZSBjb22tCiAgICAgICBwcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQgbGlrZSB0aGlzLiAgVGhlIHJlc3VsdGluZyBvdXRwdXRzCiAgICAgICBhcmUgIGZlZCAgc2VxdWVudGlhbGx5IHRvIHN0ZG91dC4gIENvbXByZXNzaW9uIG9mIG11bHRpcGxlCiAgICAgICBmaWxlcyBpbiB0aGlzIG1hbm5lciBnZW5lcmF0ZXMgYSBzdHJlYW0gY29udGFpbmluZyAgbXVsdGmtCiAgICAgICBwbGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudGF0aW9ucy4gIFN1Y2ggYSBzdHJlYW0gY2FuIGJlCiAgICAgICBkZWNvbXByZXNzZWQgY29ycmVjdGx5IG9ubHkgIGJ5ICBfCGJfCHpfCGlfCHBfCDIgIHZlcnNpb24gIDAuOS4wICBvcgogICAgICAgbGF0ZXIuICAgRWFybGllciAgdmVyc2lvbnMgb2YgXwhiXwh6XwhpXwhwXwgyIHdpbGwgc3RvcCBhZnRlciBkZWNvba0KICAgICAgIHByZXNzaW5nIHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCgogICAgICAgXwhiXwh6XwhjXwhhXwh0IChvciBfCGJfCHpfCGlfCHBfCDIgXwgtXwhkXwhjXwgpIGRlY29tcHJlc3NlcyBhbGwgc3BlY2lmaWVkICBmaWxlcyAgdG8KICAgICAgIHRoZSBzdGFuZGFyZCBvdXRwdXQuCgogICAgICAgXwhiXwh6XwhpXwhwXwgyICB3aWxsICByZWFkIGFyZ3VtZW50cyBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgIF8IQl8IWl8ISV8IUF8IMiBhbmQgXwhCXwhaXwhJXwhQXwgsIGluICB0aGF0ICBvcmRlciwgIGFuZCAgd2lsbCAgcHJvY2VzcyAgdGhlbQogICAgICAgYmVmb3JlICBhbnkgIGFyZ3VtZW50cyAgcmVhZCAgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcwogICAgICAgZ2l2ZXMgYSBjb252ZW5pZW50IHdheSB0byBzdXBwbHkgZGVmYXVsdCBhcmd1bWVudHMuCgogICAgICAgQ29tcHJlc3Npb24gaXMgYWx3YXlzIHBlcmZvcm1lZCwgZXZlbiAgaWYgIHRoZSAgY29tcHJlc3NlZAogICAgICAgZmlsZSAgaXMgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG9yaWdpbmFsLiAgRmlsZXMgb2YgbGVzcwogICAgICAgdGhhbiBhYm91dCBvbmUgaHVuZHJlZCBieXRlcyB0ZW5kIHRvIGdldCBsYXJnZXIsIHNpbmNlIHRoZQogICAgICAgY29tcHJlc3Npb24gIG1lY2hhbmlzbSAgaGFzICBhICBjb25zdGFudCAgb3ZlcmhlYWQgIGluIHRoZQogICAgICAgcmVnaW9uIG9mIDUwIGJ5dGVzLiAgUmFuZG9tIGRhdGEgKGluY2x1ZGluZyB0aGUgb3V0cHV0ICBvZgogICAgICAgbW9zdCAgZmlsZSAgY29tcHJlc3NvcnMpICBpcyAgY29kZWQgYXQgYWJvdXQgOC4wNSBiaXRzIHBlcgogICAgICAgYnl0ZSwgZ2l2aW5nIGFuIGV4cGFuc2lvbiBvZiBhcm91bmQgMC41JS4KCiAgICAgICBBcyBhIHNlbGYtY2hlY2sgZm9yIHlvdXIgIHByb3RlY3Rpb24sICBfCGJfCHpfCGlfCHBfCDIgIHVzZXMgIDMyLWJpdAogICAgICAgQ1JDcyAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIGEgZmlsZQogICAgICAgaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbC4gIFRoaXMgZ3VhcmRzIGFnYWluc3QgY29ycnVwrQogICAgICAgdGlvbiAgb2YgIHRoZSBjb21wcmVzc2VkIGRhdGEsIGFuZCBhZ2FpbnN0IHVuZGV0ZWN0ZWQgYnVncwogICAgICAgaW4gXwhiXwh6XwhpXwhwXwgyIChob3BlZnVsbHkgdmVyeSB1bmxpa2VseSkuICBUaGUgY2hhbmNlcyAgb2YgIGRhdGEKICAgICAgIGNvcnJ1cHRpb24gIGdvaW5nICB1bmRldGVjdGVkICBpcyAgbWljcm9zY29waWMsICBhYm91dCBvbmUKICAgICAgIGNoYW5jZSBpbiBmb3VyIGJpbGxpb24gZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuICBCZSBhd2FyZSwKICAgICAgIHRob3VnaCwgIHRoYXQgIHRoZSAgY2hlY2sgb2NjdXJzIHVwb24gZGVjb21wcmVzc2lvbiwgc28gaXQKICAgICAgIGNhbiBvbmx5IHRlbGwgeW91IHRoYXQgc29tZXRoaW5nIGlzIHdyb25nLiAgSXQgY2FuJ3QgIGhlbHAKICAgICAgIHlvdSAgcmVjb3ZlciAgdGhlIG9yaWdpbmFsIHVuY29tcHJlc3NlZCBkYXRhLiAgWW91IGNhbiB1c2UKICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciB0byB0cnkgdG8gcmVjb3ZlciBkYXRhIGZyb20gZGFtYWdlZCBmaWxlcy4KCiAgICAgICBSZXR1cm4gdmFsdWVzOiAwIGZvciBhIG5vcm1hbCBleGl0LCAgMSAgZm9yICBlbnZpcm9ubWVudGFsCiAgICAgICBwcm9ibGVtcyAgKGZpbGUgbm90IGZvdW5kLCBpbnZhbGlkIGZsYWdzLCBJL08gZXJyb3JzLCAmYyksCiAgICAgICAyIHRvIGluZGljYXRlIGEgY29ycnVwdCBjb21wcmVzc2VkIGZpbGUsIDMgZm9yIGFuIGludGVybmFsCiAgICAgICBjb25zaXN0ZW5jeSBlcnJvciAoZWcsIGJ1Zykgd2hpY2ggY2F1c2VkIF8IYl8Iel8IaV8IcF8IMiB0byBwYW5pYy4KCgpPCE9QCFBUCFRJCElPCE9OCE5TCFMKICAgICAgIC0ILWMIYyAtCC0tCC1zCHN0CHRkCGRvCG91CHV0CHQKICAgICAgICAgICAgICBDb21wcmVzcyBvciBkZWNvbXByZXNzIHRvIHN0YW5kYXJkIG91dHB1dC4KCiAgICAgICAtCC1kCGQgLQgtLQgtZAhkZQhlYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCiAgICAgICAgICAgICAgRm9yY2UgIGRlY29tcHJlc3Npb24uICBfCGJfCHpfCGlfCHBfCDJfCCwgXwhiXwh1XwhuXwh6XwhpXwhwXwgyIGFuZCBfCGJfCHpfCGNfCGFfCHQgYXJlCiAgICAgICAgICAgICAgcmVhbGx5IHRoZSBzYW1lIHByb2dyYW0sICBhbmQgIHRoZSAgZGVjaXNpb24gIGFib3V0CiAgICAgICAgICAgICAgd2hhdCAgYWN0aW9ucyB0byB0YWtlIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHdoaWNoCiAgICAgICAgICAgICAgbmFtZSBpcyB1c2VkLiAgVGhpcyBmbGFnIG92ZXJyaWRlcyB0aGF0ICBtZWNoYW5pc20sCiAgICAgICAgICAgICAgYW5kIGZvcmNlcyBfCGJfCHpfCGlfCHBfCDIgdG8gZGVjb21wcmVzcy4KCiAgICAgICAtCC16CHogLQgtLQgtYwhjbwhvbQhtcAhwcghyZQhlcwhzcwhzCiAgICAgICAgICAgICAgVGhlICAgY29tcGxlbWVudCAgIHRvICAgLWQ6ICAgZm9yY2VzICAgY29tcHJlc3Npb24sCiAgICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgaW52b2NhdGlvbiBuYW1lLgoKICAgICAgIC0ILXQIdCAtCC0tCC10CHRlCGVzCHN0CHQKICAgICAgICAgICAgICBDaGVjayBpbnRlZ3JpdHkgb2YgdGhlIHNwZWNpZmllZCBmaWxlKHMpLCBidXQgZG9uJ3QKICAgICAgICAgICAgICBkZWNvbXByZXNzICB0aGVtLiAgIFRoaXMgIHJlYWxseSAgcGVyZm9ybXMgIGEgdHJpYWwKICAgICAgICAgICAgICBkZWNvbXByZXNzaW9uIGFuZCB0aHJvd3MgYXdheSB0aGUgcmVzdWx0LgoKICAgICAgIC0ILWYIZiAtCC0tCC1mCGZvCG9yCHJjCGNlCGUKICAgICAgICAgICAgICBGb3JjZSBvdmVyd3JpdGUgb2Ygb3V0cHV0IGZpbGVzLiAgIE5vcm1hbGx5LCAgXwhiXwh6XwhpXwhwXwgyCiAgICAgICAgICAgICAgd2lsbCAgbm90ICBvdmVyd3JpdGUgIGV4aXN0aW5nICBvdXRwdXQgZmlsZXMuICBBbHNvCiAgICAgICAgICAgICAgZm9yY2VzIF8IYl8Iel8IaV8IcF8IMiB0byBicmVhayBoYXJkIGxpbmtzIHRvIGZpbGVzLCB3aGljaCBpdAogICAgICAgICAgICAgIG90aGVyd2lzZSB3b3VsZG4ndCBkby4KCiAgICAgICAgICAgICAgYnppcDIgIG5vcm1hbGx5ICBkZWNsaW5lcyB0byBkZWNvbXByZXNzIGZpbGVzIHdoaWNoCiAgICAgICAgICAgICAgZG9uJ3QgaGF2ZSB0aGUgIGNvcnJlY3QgIG1hZ2ljICBoZWFkZXIgIGJ5dGVzLiAgIElmCiAgICAgICAgICAgICAgZm9yY2VkICAoLWYpLCAgaG93ZXZlciwgIGl0ICB3aWxsICBwYXNzICBzdWNoIGZpbGVzCiAgICAgICAgICAgICAgdGhyb3VnaCB1bm1vZGlmaWVkLiAgVGhpcyBpcyBob3cgR05VIGd6aXAgIGJlaGF2ZXMuCgogICAgICAgLQgtawhrIC0ILS0ILWsIa2UIZWUIZXAIcAogICAgICAgICAgICAgIEtlZXAgIChkb24ndCBkZWxldGUpIGlucHV0IGZpbGVzIGR1cmluZyBjb21wcmVzc2lvbgogICAgICAgICAgICAgIG9yIGRlY29tcHJlc3Npb24uCgogICAgICAgLQgtcwhzIC0ILS0ILXMIc20IbWEIYWwIbGwIbAogICAgICAgICAgICAgIFJlZHVjZSBtZW1vcnkgdXNhZ2UsIGZvciBjb21wcmVzc2lvbiwgZGVjb21wcmVzc2lvbgogICAgICAgICAgICAgIGFuZCAgdGVzdGluZy4gICBGaWxlcyAgYXJlICBkZWNvbXByZXNzZWQgYW5kIHRlc3RlZAogICAgICAgICAgICAgIHVzaW5nIGEgbW9kaWZpZWQgYWxnb3JpdGhtIHdoaWNoIG9ubHkgcmVxdWlyZXMgIDIuNQogICAgICAgICAgICAgIGJ5dGVzICBwZXIgIGJsb2NrIGJ5dGUuICBUaGlzIG1lYW5zIGFueSBmaWxlIGNhbiBiZQogICAgICAgICAgICAgIGRlY29tcHJlc3NlZCBpbiAyMzAwayBvZiBtZW1vcnksICBhbGJlaXQgIGF0ICBhYm91dAogICAgICAgICAgICAgIGhhbGYgdGhlIG5vcm1hbCBzcGVlZC4KCiAgICAgICAgICAgICAgRHVyaW5nICBjb21wcmVzc2lvbiwgIC1zICBzZWxlY3RzICBhICBibG9jayBzaXplIG9mCiAgICAgICAgICAgICAgMjAwaywgd2hpY2ggbGltaXRzIG1lbW9yeSB1c2UgdG8gIGFyb3VuZCAgdGhlICBzYW1lCiAgICAgICAgICAgICAgZmlndXJlLCAgYXQgIHRoZSBleHBlbnNlIG9mIHlvdXIgY29tcHJlc3Npb24gcmF0aW8uCiAgICAgICAgICAgICAgSW4gc2hvcnQsIGlmIHlvdXIgIG1hY2hpbmUgIGlzICBsb3cgIG9uICBtZW1vcnkgICg4CiAgICAgICAgICAgICAgbWVnYWJ5dGVzICBvciAgbGVzcyksICB1c2UgIC1zIGZvciBldmVyeXRoaW5nLiAgU2VlCiAgICAgICAgICAgICAgTUVNT1JZIE1BTkFHRU1FTlQgYmVsb3cuCgogICAgICAgLQgtcQhxIC0ILS0ILXEIcXUIdWkIaWUIZXQIdAogICAgICAgICAgICAgIFN1cHByZXNzIG5vbi1lc3NlbnRpYWwgd2FybmluZyBtZXNzYWdlcy4gICBNZXNzYWdlcwogICAgICAgICAgICAgIHBlcnRhaW5pbmcgIHRvIEkvTyBlcnJvcnMgYW5kIG90aGVyIGNyaXRpY2FsIGV2ZW50cwogICAgICAgICAgICAgIHdpbGwgbm90IGJlIHN1cHByZXNzZWQuCgogICAgICAgLQgtdgh2IC0ILS0ILXYIdmUIZXIIcmIIYm8Ib3MIc2UIZQogICAgICAgICAgICAgIFZlcmJvc2UgbW9kZSAtLSBzaG93IHRoZSBjb21wcmVzc2lvbiByYXRpbyBmb3IgZWFjaAogICAgICAgICAgICAgIGZpbGUgIHByb2Nlc3NlZC4gICBGdXJ0aGVyICAtdidzICBpbmNyZWFzZSB0aGUgdmVyrQogICAgICAgICAgICAgIGJvc2l0eSBsZXZlbCwgc3Bld2luZyBvdXQgbG90cyBvZiBpbmZvcm1hdGlvbiB3aGljaAogICAgICAgICAgICAgIGlzIHByaW1hcmlseSBvZiBpbnRlcmVzdCBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4KCiAgICAgICAtCC1MCEwgLQgtLQgtbAhsaQhpYwhjZQhlbghucwhzZQhlIC0ILVYIViAtCC0tCC12CHZlCGVyCHJzCHNpCGlvCG9uCG4KICAgICAgICAgICAgICBEaXNwbGF5ICB0aGUgIHNvZnR3YXJlICB2ZXJzaW9uLCAgbGljZW5zZSB0ZXJtcyBhbmQKICAgICAgICAgICAgICBjb25kaXRpb25zLgoKICAgICAgIC0ILTEIMSAoCChvCG9yCHIgLQgtLQgtZghmYQhhcwhzdAh0KQgpIHQIdG8IbyAtCC05CDkgKAgobwhvcghyIC0ILS0ILWIIYmUIZXMIc3QIdCkIKQogICAgICAgICAgICAgIFNldCB0aGUgYmxvY2sgc2l6ZSB0byAxMDAgaywgMjAwIGsgLi4gIDkwMCAgayAgd2hlbgogICAgICAgICAgICAgIGNvbXByZXNzaW5nLiAgIEhhcyAgbm8gIGVmZmVjdCAgd2hlbiBkZWNvbXByZXNzaW5nLgogICAgICAgICAgICAgIFNlZSBNRU1PUlkgTUFOQUdFTUVOVCBiZWxvdy4gIFRoZSAtLWZhc3QgYW5kIC0tYmVzdAogICAgICAgICAgICAgIGFsaWFzZXMgIGFyZSAgcHJpbWFyaWx5IGZvciBHTlUgZ3ppcCBjb21wYXRpYmlsaXR5LgogICAgICAgICAgICAgIEluIHBhcnRpY3VsYXIsIC0tZmFzdCBkb2Vzbid0IG1ha2UgdGhpbmdzICBzaWduaWZprQogICAgICAgICAgICAgIGNhbnRseSAgZmFzdGVyLiAgIEFuZCAgLS1iZXN0ICBtZXJlbHkgIHNlbGVjdHMgIHRoZQogICAgICAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3VyLgoKICAgICAgIC0ILS0ILSAgICAgVHJlYXRzIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcyBmaWxlIG5hbWVzLCBldmVuCiAgICAgICAgICAgICAgaWYgdGhleSBzdGFydCB3aXRoIGEgZGFzaC4gIFRoaXMgaXMgc28geW91IGNhbiBoYW6tCiAgICAgICAgICAgICAgZGxlIGZpbGVzIHdpdGggbmFtZXMgYmVnaW5uaW5nICB3aXRoICBhICBkYXNoLCAgZm9yCiAgICAgICAgICAgICAgZXhhbXBsZTogYnppcDIgLS0gLW15ZmlsZW5hbWUuCgogICAgICAgLQgtLQgtcghyZQhlcAhwZQhldAh0aQhpdAh0aQhpdgh2ZQhlLQgtZghmYQhhcwhzdAh0IC0ILS0ILXIIcmUIZXAIcGUIZXQIdGkIaXQIdGkIaXYIdmUIZS0ILWIIYmUIZXMIc3QIdAogICAgICAgICAgICAgIFRoZXNlICBmbGFncyAgYXJlICByZWR1bmRhbnQgIGluIHZlcnNpb25zIDAuOS41IGFuZAogICAgICAgICAgICAgIGFib3ZlLiAgVGhleSBwcm92aWRlZCBzb21lIGNvYXJzZSBjb250cm9sIG92ZXIgIHRoZQogICAgICAgICAgICAgIGJlaGF2aW91ciAgb2YgdGhlIHNvcnRpbmcgYWxnb3JpdGhtIGluIGVhcmxpZXIgdmVyrQogICAgICAgICAgICAgIHNpb25zLCB3aGljaCB3YXMgc29tZXRpbWVzIHVzZWZ1bC4gIDAuOS41IGFuZCBhYm92ZQogICAgICAgICAgICAgIGhhdmUgIGFuICBpbXByb3ZlZCAgYWxnb3JpdGhtICB3aGljaCAgcmVuZGVycyB0aGVzZQogICAgICAgICAgICAgIGZsYWdzIGlycmVsZXZhbnQuCgoKTQhNRQhFTQhNTwhPUghSWQhZIE0ITUEIQU4ITkEIQUcIR0UIRU0ITUUIRU4ITlQIVAogICAgICAgXwhiXwh6XwhpXwhwXwgyIGNvbXByZXNzZXMgbGFyZ2UgZmlsZXMgaW4gYmxvY2tzLiAgIFRoZSAgYmxvY2sgIHNpemUKICAgICAgIGFmZmVjdHMgIGJvdGggIHRoZSAgY29tcHJlc3Npb24gIHJhdGlvICBhY2hpZXZlZCwgIGFuZCB0aGUKICAgICAgIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbi4KICAgICAgIFRoZSAgZmxhZ3MgIC0xICB0aHJvdWdoICAtOSAgc3BlY2lmeSAgdGhlIGJsb2NrIHNpemUgdG8gYmUKICAgICAgIDEwMCwwMDAgYnl0ZXMgdGhyb3VnaCA5MDAsMDAwIGJ5dGVzICh0aGUgZGVmYXVsdCkgIHJlc3BlY60KICAgICAgIHRpdmVseS4gICBBdCAgZGVjb21wcmVzc2lvbiAgdGltZSwgdGhlIGJsb2NrIHNpemUgdXNlZCBmb3IKICAgICAgIGNvbXByZXNzaW9uIGlzIHJlYWQgZnJvbSAgdGhlICBoZWFkZXIgIG9mICB0aGUgIGNvbXByZXNzZWQKICAgICAgIGZpbGUsIGFuZCBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgdGhlbiBhbGxvY2F0ZXMgaXRzZWxmIGp1c3QgZW5vdWdoIG1lbW9yeQogICAgICAgdG8gZGVjb21wcmVzcyB0aGUgZmlsZS4gIFNpbmNlIGJsb2NrIHNpemVzIGFyZSAgc3RvcmVkICBpbgogICAgICAgY29tcHJlc3NlZCAgZmlsZXMsICBpdCBmb2xsb3dzIHRoYXQgdGhlIGZsYWdzIC0xIHRvIC05IGFyZQogICAgICAgaXJyZWxldmFudCB0byBhbmQgc28gaWdub3JlZCBkdXJpbmcgZGVjb21wcmVzc2lvbi4KCiAgICAgICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiByZXF1aXJlbWVudHMsIGluIGJ5dGVzLCAgY2FuCiAgICAgICBiZSBlc3RpbWF0ZWQgYXM6CgogICAgICAgICAgICAgIENvbXByZXNzaW9uOiAgIDQwMGsgKyAoIDggeCBibG9jayBzaXplICkKCiAgICAgICAgICAgICAgRGVjb21wcmVzc2lvbjogMTAwayArICggNCB4IGJsb2NrIHNpemUgKSwgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDBrICsgKCAyLjUgeCBibG9jayBzaXplICkKCiAgICAgICBMYXJnZXIgIGJsb2NrICBzaXplcyAgZ2l2ZSAgcmFwaWRseSAgZGltaW5pc2hpbmcgIG1hcmdpbmFsCiAgICAgICByZXR1cm5zLiAgTW9zdCBvZiB0aGUgY29tcHJlc3Npb24gY29tZXMgZnJvbSB0aGUgZmlyc3QgdHdvCiAgICAgICBvciAgdGhyZWUgaHVuZHJlZCBrIG9mIGJsb2NrIHNpemUsIGEgZmFjdCB3b3J0aCBiZWFyaW5nIGluCiAgICAgICBtaW5kIHdoZW4gdXNpbmcgXwhiXwh6XwhpXwhwXwgyICBvbiAgc21hbGwgIG1hY2hpbmVzLiAgIEl0ICBpcyAgYWxzbwogICAgICAgaW1wb3J0YW50ICB0byAgYXBwcmVjaWF0ZSAgdGhhdCAgdGhlICBkZWNvbXByZXNzaW9uIG1lbW9yeQogICAgICAgcmVxdWlyZW1lbnQgaXMgc2V0IGF0IGNvbXByZXNzaW9uIHRpbWUgYnkgIHRoZSAgY2hvaWNlICBvZgogICAgICAgYmxvY2sgc2l6ZS4KCiAgICAgICBGb3IgIGZpbGVzICBjb21wcmVzc2VkICB3aXRoICB0aGUgZGVmYXVsdCA5MDBrIGJsb2NrIHNpemUsCiAgICAgICBfCGJfCHVfCG5fCHpfCGlfCHBfCDIgd2lsbCByZXF1aXJlIGFib3V0IDM3MDAga2J5dGVzIHRvIGRlY29tcHJlc3MuICAgVG8KICAgICAgIHN1cHBvcnQgZGVjb21wcmVzc2lvbiBvZiBhbnkgZmlsZSBvbiBhIDQgbWVnYWJ5dGUgbWFjaGluZSwKICAgICAgIF8IYl8IdV8Ibl8Iel8IaV8IcF8IMiBoYXMgYW4gb3B0aW9uIHRvICBkZWNvbXByZXNzICB1c2luZyAgYXBwcm94aW1hdGVseQogICAgICAgaGFsZiB0aGlzIGFtb3VudCBvZiBtZW1vcnksIGFib3V0IDIzMDAga2J5dGVzLiAgRGVjb21wcmVzrQogICAgICAgc2lvbiBzcGVlZCBpcyBhbHNvIGhhbHZlZCwgc28geW91IHNob3VsZCB1c2UgIHRoaXMgIG9wdGlvbgogICAgICAgb25seSB3aGVyZSBuZWNlc3NhcnkuICBUaGUgcmVsZXZhbnQgZmxhZyBpcyAtcy4KCiAgICAgICBJbiBnZW5lcmFsLCB0cnkgYW5kIHVzZSB0aGUgbGFyZ2VzdCBibG9jayBzaXplIG1lbW9yeSBjb26tCiAgICAgICBzdHJhaW50cyAgYWxsb3csICBzaW5jZSAgdGhhdCAgbWF4aW1pc2VzICB0aGUgIGNvbXByZXNzaW9uCiAgICAgICBhY2hpZXZlZC4gICBDb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZCBhcmUgdmlydHWtCiAgICAgICBhbGx5IHVuYWZmZWN0ZWQgYnkgYmxvY2sgc2l6ZS4KCiAgICAgICBBbm90aGVyIHNpZ25pZmljYW50IHBvaW50IGFwcGxpZXMgdG8gZmlsZXMgd2hpY2ggZml0IGluICBhCiAgICAgICBzaW5nbGUgIGJsb2NrICAtLSAgdGhhdCAgbWVhbnMgIG1vc3QgZmlsZXMgeW91J2QgZW5jb3VudGVyCiAgICAgICB1c2luZyBhIGxhcmdlIGJsb2NrICBzaXplLiAgIFRoZSAgYW1vdW50ICBvZiAgcmVhbCAgbWVtb3J5CiAgICAgICB0b3VjaGVkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgc2luY2UgdGhlCiAgICAgICBmaWxlIGlzIHNtYWxsZXIgdGhhbiBhIGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbXByZXNzaW5nICBhCiAgICAgICBmaWxlICAyMCwwMDAgIGJ5dGVzICBsb25nICB3aXRoIHRoZSBmbGFnIC05IHdpbGwgY2F1c2UgdGhlCiAgICAgICBjb21wcmVzc29yIHRvIGFsbG9jYXRlIGFyb3VuZCA3NjAwayBvZiAgbWVtb3J5LCAgYnV0ICBvbmx5CiAgICAgICB0b3VjaCA0MDBrICsgMjAwMDAgKiA4ID0gNTYwIGtieXRlcyBvZiBpdC4gIFNpbWlsYXJseSwgdGhlCiAgICAgICBkZWNvbXByZXNzb3Igd2lsbCBhbGxvY2F0ZSAzNzAwayBidXQgIG9ubHkgIHRvdWNoICAxMDBrICArCiAgICAgICAyMDAwMCAqIDQgPSAxODAga2J5dGVzLgoKICAgICAgIEhlcmUgIGlzIGEgdGFibGUgd2hpY2ggc3VtbWFyaXNlcyB0aGUgbWF4aW11bSBtZW1vcnkgdXNhZ2UKICAgICAgIGZvciBkaWZmZXJlbnQgYmxvY2sgc2l6ZXMuICBBbHNvICByZWNvcmRlZCAgaXMgIHRoZSAgdG90YWwKICAgICAgIGNvbXByZXNzZWQgIHNpemUgZm9yIDE0IGZpbGVzIG9mIHRoZSBDYWxnYXJ5IFRleHQgQ29tcHJlc60KICAgICAgIHNpb24gQ29ycHVzIHRvdGFsbGluZyAzLDE0MSw2MjIgYnl0ZXMuICBUaGlzIGNvbHVtbiAgZ2l2ZXMKICAgICAgIHNvbWUgIGZlZWwgIGZvciAgaG93ICBjb21wcmVzc2lvbiAgdmFyaWVzIHdpdGggYmxvY2sgc2l6ZS4KICAgICAgIFRoZXNlIGZpZ3VyZXMgdGVuZCB0byB1bmRlcnN0YXRlIHRoZSBhZHZhbnRhZ2UgIG9mICBsYXJnZXIKICAgICAgIGJsb2NrICBzaXplcyAgZm9yICBsYXJnZXIgZmlsZXMsIHNpbmNlIHRoZSBDb3JwdXMgaXMgZG9taa0KICAgICAgIG5hdGVkIGJ5IHNtYWxsZXIgZmlsZXMuCgogICAgICAgICAgICAgICAgICBDb21wcmVzcyAgIERlY29tcHJlc3MgICBEZWNvbXByZXNzICAgQ29ycHVzCiAgICAgICAgICAgRmxhZyAgICAgdXNhZ2UgICAgICB1c2FnZSAgICAgICAtcyB1c2FnZSAgICAgU2l6ZQoKICAgICAgICAgICAgLTEgICAgICAxMjAwayAgICAgICA1MDBrICAgICAgICAgMzUwayAgICAgIDkxNDcwNAogICAgICAgICAgICAtMiAgICAgIDIwMDBrICAgICAgIDkwMGsgICAgICAgICA2MDBrICAgICAgODc3NzAzCiAgICAgICAgICAgIC0zICAgICAgMjgwMGsgICAgICAxMzAwayAgICAgICAgIDg1MGsgICAgICA4NjAzMzgKICAgICAgICAgICAgLTQgICAgICAzNjAwayAgICAgIDE3MDBrICAgICAgICAxMTAwayAgICAgIDg0Njg5OQogICAgICAgICAgICAtNSAgICAgIDQ0MDBrICAgICAgMjEwMGsgICAgICAgIDEzNTBrICAgICAgODQ1MTYwCiAgICAgICAgICAgIC02ICAgICAgNTIwMGsgICAgICAyNTAwayAgICAgICAgMTYwMGsgICAgICA4Mzg2MjYKICAgICAgICAgICAgLTcgICAgICA2MTAwayAgICAgIDI5MDBrICAgICAgICAxODUwayAgICAgIDgzNDA5NgogICAgICAgICAgICAtOCAgICAgIDY4MDBrICAgICAgMzMwMGsgICAgICAgIDIxMDBrICAgICAgODI4NjQyCiAgICAgICAgICAgIC05ICAgICAgNzYwMGsgICAgICAzNzAwayAgICAgICAgMjM1MGsgICAgICA4Mjg2NDIKCgpSCFJFCEVDCENPCE9WCFZFCEVSCFJJCElOCE5HCEcgRAhEQQhBVAhUQQhBIEYIRlIIUk8IT00ITSBECERBCEFNCE1BCEFHCEdFCEVECEQgRghGSQhJTAhMRQhFUwhTCiAgICAgICBfCGJfCHpfCGlfCHBfCDIgY29tcHJlc3NlcyBmaWxlcyBpbiBibG9ja3MsIHVzdWFsbHkgOTAwa2J5dGVzICBsb25nLgogICAgICAgRWFjaCBibG9jayBpcyBoYW5kbGVkIGluZGVwZW5kZW50bHkuICBJZiBhIG1lZGlhIG9yIHRyYW5zrQogICAgICAgbWlzc2lvbiBlcnJvciBjYXVzZXMgYSBtdWx0aS1ibG9jayAgLmJ6MiAgZmlsZSAgdG8gIGJlY29tZQogICAgICAgZGFtYWdlZCwgIGl0ICBtYXkgIGJlICBwb3NzaWJsZSAgdG8gIHJlY292ZXIgZGF0YSBmcm9tIHRoZQogICAgICAgdW5kYW1hZ2VkIGJsb2NrcyBpbiB0aGUgZmlsZS4KCiAgICAgICBUaGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIGJsb2NrICBpcyAgZGVsaW1pdGVkCiAgICAgICBieSAgYSAgNDgtYml0IHBhdHRlcm4sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGZpbmQgdGhlCiAgICAgICBibG9jayBib3VuZGFyaWVzIHdpdGggcmVhc29uYWJsZSAgY2VydGFpbnR5LiAgIEVhY2ggIGJsb2NrCiAgICAgICBhbHNvICBjYXJyaWVzIGl0cyBvd24gMzItYml0IENSQywgc28gZGFtYWdlZCBibG9ja3MgY2FuIGJlCiAgICAgICBkaXN0aW5ndWlzaGVkIGZyb20gdW5kYW1hZ2VkIG9uZXMuCgogICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIGlzIGEgIHNpbXBsZSAgcHJvZ3JhbSAgd2hvc2UgIHB1cnBvc2UgIGlzICB0bwogICAgICAgc2VhcmNoICBmb3IgYmxvY2tzIGluIC5iejIgZmlsZXMsIGFuZCB3cml0ZSBlYWNoIGJsb2NrIG91dAogICAgICAgaW50byBpdHMgb3duIC5iejIgZmlsZS4gIFlvdSBjYW4gdGhlbiB1c2UgXwhiXwh6XwhpXwhwXwgyIC10IHRvIHRlc3QKICAgICAgIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc3VsdGluZyBmaWxlcywgYW5kIGRlY29tcHJlc3MgdGhvc2UKICAgICAgIHdoaWNoIGFyZSB1bmRhbWFnZWQuCgogICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbmFtZSBvZiB0aGUgZGFtrQogICAgICAgYWdlZCAgICBmaWxlLCAgICBhbmQgICAgd3JpdGVzICAgIGEgICAgbnVtYmVyICAgb2YgICBmaWxlcwogICAgICAgInJlYzAwMDAxZmlsZS5iejIiLCAgInJlYzAwMDAyZmlsZS5iejIiLCAgZXRjLCAgY29udGFpbmluZwogICAgICAgdGhlICAgZXh0cmFjdGVkICAgYmxvY2tzLiAgIFRoZSAgIG91dHB1dCAgIGZpbGVuYW1lcyAgIGFyZQogICAgICAgZGVzaWduZWQgIHNvICB0aGF0IHRoZSB1c2Ugb2Ygd2lsZGNhcmRzIGluIHN1YnNlcXVlbnQgcHJvrQogICAgICAgY2Vzc2luZyAgLS0gZm9yIGV4YW1wbGUsICJiemlwMiAtZGMgIHJlYypmaWxlLmJ6MiA+IHJlY292rQogICAgICAgZXJlZF9kYXRhIiAtLSBwcm9jZXNzZXMgdGhlIGZpbGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgoKICAgICAgIF8IYl8Iel8IaV8IcF8IMl8Icl8IZV8IY18Ib18Idl8IZV8IciBzaG91bGQgYmUgb2YgbW9zdCB1c2UgZGVhbGluZyB3aXRoIGxhcmdlIC5iejIKICAgICAgIGZpbGVzLCAgYXMgIHRoZXNlIHdpbGwgY29udGFpbiBtYW55IGJsb2Nrcy4gIEl0IGlzIGNsZWFybHkKICAgICAgIGZ1dGlsZSB0byB1c2UgaXQgb24gZGFtYWdlZCBzaW5nbGUtYmxvY2sgIGZpbGVzLCAgc2luY2UgIGEKICAgICAgIGRhbWFnZWQgIGJsb2NrICBjYW5ub3QgIGJlIHJlY292ZXJlZC4gIElmIHlvdSB3aXNoIHRvIG1pbq0KICAgICAgIGltaXNlIGFueSBwb3RlbnRpYWwgZGF0YSBsb3NzIHRocm91Z2ggbWVkaWEgIG9yICB0cmFuc21pc60KICAgICAgIHNpb24gZXJyb3JzLCB5b3UgbWlnaHQgY29uc2lkZXIgY29tcHJlc3Npbmcgd2l0aCBhIHNtYWxsZXIKICAgICAgIGJsb2NrIHNpemUuCgoKUAhQRQhFUghSRghGTwhPUghSTQhNQQhBTghOQwhDRQhFIE4ITk8IT1QIVEUIRVMIUwogICAgICAgVGhlIHNvcnRpbmcgcGhhc2Ugb2YgY29tcHJlc3Npb24gZ2F0aGVycyB0b2dldGhlciAgc2ltaWxhcgogICAgICAgc3RyaW5ncyAgaW4gIHRoZSAgZmlsZS4gIEJlY2F1c2Ugb2YgdGhpcywgZmlsZXMgY29udGFpbmluZwogICAgICAgdmVyeSBsb25nIHJ1bnMgb2YgIHJlcGVhdGVkICBzeW1ib2xzLCAgbGlrZSAgImFhYmFhYmFhYmFhYgogICAgICAgLi4uIiAgIChyZXBlYXRlZCAgc2V2ZXJhbCBodW5kcmVkIHRpbWVzKSBtYXkgY29tcHJlc3MgbW9yZQogICAgICAgc2xvd2x5IHRoYW4gbm9ybWFsLiAgVmVyc2lvbnMgMC45LjUgYW5kICBhYm92ZSAgZmFyZSAgbXVjaAogICAgICAgYmV0dGVyICB0aGFuIHByZXZpb3VzIHZlcnNpb25zIGluIHRoaXMgcmVzcGVjdC4gIFRoZSByYXRpbwogICAgICAgYmV0d2VlbiB3b3JzdC1jYXNlIGFuZCBhdmVyYWdlLWNhc2UgY29tcHJlc3Npb24gdGltZSBpcyBpbgogICAgICAgdGhlICByZWdpb24gIG9mICAxMDoxLiAgRm9yIHByZXZpb3VzIHZlcnNpb25zLCB0aGlzIGZpZ3VyZQogICAgICAgd2FzIG1vcmUgbGlrZSAxMDA6MS4gIFlvdSBjYW4gdXNlIHRoZSAtdnZ2diBvcHRpb24gdG8gbW9urQogICAgICAgaXRvciBwcm9ncmVzcyBpbiBncmVhdCBkZXRhaWwsIGlmIHlvdSB3YW50LgoKICAgICAgIERlY29tcHJlc3Npb24gc3BlZWQgaXMgdW5hZmZlY3RlZCBieSB0aGVzZSBwaGVub21lbmEuCgogICAgICAgXwhiXwh6XwhpXwhwXwgyICB1c3VhbGx5ICBhbGxvY2F0ZXMgIHNldmVyYWwgIG1lZ2FieXRlcyBvZiBtZW1vcnkgdG8KICAgICAgIG9wZXJhdGUgaW4sIGFuZCB0aGVuIGNoYXJnZXMgYWxsIG92ZXIgaXQgaW4gYSBmYWlybHkgIHJhbq0KICAgICAgIGRvbSAgZmFzaGlvbi4gICBUaGlzIG1lYW5zIHRoYXQgcGVyZm9ybWFuY2UsIGJvdGggZm9yIGNvba0KICAgICAgIHByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nLCBpcyBsYXJnZWx5IGRldGVybWluZWQgIGJ5ICB0aGUKICAgICAgIHNwZWVkICBhdCAgd2hpY2ggIHlvdXIgIG1hY2hpbmUgIGNhbiBzZXJ2aWNlIGNhY2hlIG1pc3Nlcy4KICAgICAgIEJlY2F1c2Ugb2YgdGhpcywgc21hbGwgY2hhbmdlcyB0byB0aGUgY29kZSB0byAgcmVkdWNlICB0aGUKICAgICAgIG1pc3MgIHJhdGUgIGhhdmUgIGJlZW4gb2JzZXJ2ZWQgdG8gZ2l2ZSBkaXNwcm9wb3J0aW9uYXRlbHkKICAgICAgIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gIEkgaW1hZ2luZSBfCGJfCHpfCGlfCHBfCDIgd2lsbCBwZXKtCiAgICAgICBmb3JtIGJlc3Qgb24gbWFjaGluZXMgd2l0aCB2ZXJ5IGxhcmdlIGNhY2hlcy4KCgpDCENBCEFWCFZFCEVBCEFUCFRTCFMKICAgICAgIEkvTyAgZXJyb3IgIG1lc3NhZ2VzICBhcmUgbm90IGFzIGhlbHBmdWwgYXMgdGhleSBjb3VsZCBiZS4KICAgICAgIF8IYl8Iel8IaV8IcF8IMiB0cmllcyBoYXJkIHRvIGRldGVjdCBJL08gZXJyb3JzICBhbmQgIGV4aXQgIGNsZWFubHksCiAgICAgICBidXQgIHRoZSAgZGV0YWlscyAgb2YgIHdoYXQgIHRoZSBwcm9ibGVtIGlzIHNvbWV0aW1lcyBzZWVtCiAgICAgICByYXRoZXIgbWlzbGVhZGluZy4KCiAgICAgICBUaGlzIG1hbnVhbCBwYWdlIHBlcnRhaW5zIHRvIHZlcnNpb24gMS4wLjIgb2YgXwhiXwh6XwhpXwhwXwgyXwguICBDb22tCiAgICAgICBwcmVzc2VkICBkYXRhIGNyZWF0ZWQgYnkgdGhpcyB2ZXJzaW9uIGlzIGVudGlyZWx5IGZvcndhcmRzCiAgICAgICBhbmQgIGJhY2t3YXJkcyAgY29tcGF0aWJsZSAgd2l0aCAgIHRoZSAgIHByZXZpb3VzICAgcHVibGljCiAgICAgICByZWxlYXNlcywgIHZlcnNpb25zIDAuMXBsMiwgMC45LjAsIDAuOS41LCAxLjAuMCBhbmQgMS4wLjEsCiAgICAgICBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjogMC45LjAgYW5kIGFib3ZlIGNhbiBjb3KtCiAgICAgICByZWN0bHkgIGRlY29tcHJlc3MgbXVsdGlwbGUgY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMuCiAgICAgICAwLjFwbDIgY2Fubm90IGRvIHRoaXM7IGl0IHdpbGwgIHN0b3AgIGFmdGVyICBkZWNvbXByZXNzaW5nCiAgICAgICBqdXN0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBzdHJlYW0uCgogICAgICAgXwhiXwh6XwhpXwhwXwgyXwhyXwhlXwhjXwhvXwh2XwhlXwhyICB2ZXJzaW9ucyAgcHJpb3IgIHRvICB0aGlzICBvbmUsICAxLjAuMiwgdXNlZAogICAgICAgMzItYml0IGludGVnZXJzIHRvIHJlcHJlc2VudCBiaXQgcG9zaXRpb25zICBpbiAgY29tcHJlc3NlZAogICAgICAgZmlsZXMsICBzbyAgaXQgY291bGQgbm90IGhhbmRsZSBjb21wcmVzc2VkIGZpbGVzIG1vcmUgdGhhbgogICAgICAgNTEyIG1lZ2FieXRlcyBsb25nLiAgVmVyc2lvbiAxLjAuMiBhbmQgYWJvdmUgIHVzZXMgIDY0LWJpdAogICAgICAgaW50cyAgb24gIHNvbWUgcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgdGhlbSAoR05VIHN1cHBvcnRlZAogICAgICAgdGFyZ2V0cywgIGFuZCAgV2luZG93cykuICAgVG8gIGVzdGFibGlzaCAgd2hldGhlciAgb3IgIG5vdAogICAgICAgYnppcDJyZWNvdmVyICB3YXMgIGJ1aWx0ICB3aXRoICBzdWNoICBhIGxpbWl0YXRpb24sIHJ1biBpdAogICAgICAgd2l0aG91dCBhcmd1bWVudHMuICBJbiBhbnkgZXZlbnQgeW91IGNhbiBidWlsZCB5b3Vyc2VsZiBhbgogICAgICAgdW5saW1pdGVkIHZlcnNpb24gaWYgeW91IGNhbiByZWNvbXBpbGUgaXQgd2l0aCBNYXliZVVJbnQ2NAogICAgICAgc2V0IHRvIGJlIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLgoKCgoKQQhBVQhVVAhUSAhITwhPUghSCiAgICAgICBKdWxpYW4gU2V3YXJkLCBqc2V3YXJkQGFjbS5vcmcuCgogICAgICAgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9iemlwMgoKICAgICAgIFRoZSBpZGVhcyBlbWJvZGllZCBpbiBfCGJfCHpfCGlfCHBfCDIgYXJlIGR1ZSB0byAoYXQgbGVhc3QpIHRoZSBmb2ytCiAgICAgICBsb3dpbmcgIHBlb3BsZTogTWljaGFlbCBCdXJyb3dzIGFuZCBEYXZpZCBXaGVlbGVyIChmb3IgdGhlCiAgICAgICBibG9jayBzb3J0aW5nIHRyYW5zZm9ybWF0aW9uKSwgRGF2aWQgV2hlZWxlciAgKGFnYWluLCAgZm9yCiAgICAgICB0aGUgSHVmZm1hbiBjb2RlciksIFBldGVyIEZlbndpY2sgKGZvciB0aGUgc3RydWN0dXJlZCBjb2StCiAgICAgICBpbmcgbW9kZWwgaW4gdGhlIG9yaWdpbmFsIF8IYl8Iel8IaV8IcF8ILCBhbmQgbWFueSByZWZpbmVtZW50cyksIGFuZAogICAgICAgQWxpc3RhaXIgIE1vZmZhdCwgIFJhZGZvcmQgIE5lYWwgIGFuZCAgSWFuIFdpdHRlbiAoZm9yIHRoZQogICAgICAgYXJpdGhtZXRpYyAgY29kZXIgIGluICB0aGUgIG9yaWdpbmFsICBfCGJfCHpfCGlfCHBfCClfCC4gICBJICBhbSAgbXVjaAogICAgICAgaW5kZWJ0ZWQgZm9yIHRoZWlyIGhlbHAsIHN1cHBvcnQgYW5kIGFkdmljZS4gIFNlZSB0aGUgbWFurQogICAgICAgdWFsIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBwb2ludGVycyB0byBzb3VyY2VzICBvZgogICAgICAgZG9jdW1lbnRhdGlvbi4gIENocmlzdGlhbiB2b24gUm9xdWVzIGVuY291cmFnZWQgbWUgdG8gbG9vawogICAgICAgZm9yIGZhc3RlciBzb3J0aW5nIGFsZ29yaXRobXMsIHNvIGFzIHRvIHNwZWVkIHVwICBjb21wcmVzrQogICAgICAgc2lvbi4gIEJlbGEgTHVia2luIGVuY291cmFnZWQgbWUgdG8gaW1wcm92ZSB0aGUgd29yc3QtY2FzZQogICAgICAgY29tcHJlc3Npb24gcGVyZm9ybWFuY2UuICBUaGUgYnoqIHNjcmlwdHMgYXJlIGRlcml2ZWQgZnJvbQogICAgICAgdGhvc2UgIG9mIEdOVSBnemlwLiAgTWFueSBwZW9wbGUgc2VudCBwYXRjaGVzLCBoZWxwZWQgd2l0aAogICAgICAgcG9ydGFiaWxpdHkgcHJvYmxlbXMsIGxlbnQgbWFjaGluZXMsIGdhdmUgYWR2aWNlIGFuZCAgd2VyZQogICAgICAgZ2VuZXJhbGx5IGhlbHBmdWwuCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6aXAyKDEpCg==