LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiBDT1BZUklHSFQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiAgIChDKSBDb3B5cmlnaHQgVGFsaWdlbnQsIEluYy4sICAxOTk3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKiAgIChDKSBDb3B5cmlnaHQgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiwgIDE5OTctMTk5OCAgICAgICAgICAgICAgICAgICAgKgoqICAgTGljZW5zZWQgTWF0ZXJpYWwgLSBQcm9ncmFtLVByb3BlcnR5IG9mIElCTSAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgKgoqICAgVVMgR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgICAgICAgICAgICAgKgoqICAgcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogRmlsZSBDSEJLREFULkNQUAoqCiogTW9kaWZpY2F0aW9uIEhpc3Rvcnk6CioKKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCiogICAwMi8xOC85NyAgICBhbGl1ICAgICAgICBDb252ZXJ0ZWQgZnJvbSBPcGVuQ2xhc3MuCiogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvZGVkIGtSYXdNYXBwaW5nIHRhYmxlIGZvciBVbmljb2RlOjpnZXRUeXBlKCkgdHlwZSBjb2Rlcy4KKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZGUgc3RhdGljIGRhdGEgbWVtYmVycyBjb25zdCB3aGVyZSBhcHByb3ByaWF0ZS4KKiAgIDAzLzI1Lzk3ICAgIGFsaXUgICAgICAgIE1vdmVkIGludG8gVGV4dEJvdW5kYXJ5RGF0YTsgbm8gbG9uZ2VyIGEgc3ViY2xhc3MuCiogICAwNC8xNS85NyAgICBhbGl1ICAgICAgICBXb3JrZWQgYXJvdW5kIGJ1ZyBpbiBBSVggeGxDIGNvbXBpbGVyIHdoaWNoIG9jY3VycyBpZiBzdGF0aWMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5cyBjb250YWluIGNvbnN0IGVsZW1lbnRzLgoqICAgMDUvMDYvOTcgICAgYWxpdSAgICAgICAgTWFkZSBTcGVjaWFsTWFwcGluZyBhbiBhcnJheSBvZiBvYmplY3RzIGluc3RlYWQgb2YgcG9pbnRlcnMsCiogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBoZWxwIG91dCBub24tY29tcGxpYW50IGNvbXBpbGVycy4KKiAgIDA4LzE0Lzk4ICAgIGhlbGVuYSAgICAgIFN5bmMtdXAgSkRLMS4yLgoqICAgMDcvMTIvOTkgICAgaGVsZW5hICAgICAgSFBVWCAxMSBDQyBwb3J0LgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZnJvbSB0aGUgamF2YSBzb3VyY2UgZmlsZSBDaGFyYWN0ZXJCcmVha0RhdGEuamF2YQovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKI2luY2x1ZGUgInR4dGJkYXQuaCIKI2luY2x1ZGUgIndkYmt0YmwuaCIKI2luY2x1ZGUgInVuaWNkY20uaCIKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8gY2xhc3MgQ2hhcmFjdGVyQnJlYWtEYXRhCi8vIFRoZSBmb2xsb3dpbmcgdGFibGVzIGNvbnRhaW4gdGhlIHRyYW5zaXRpb24gc3RhdGUgZGF0YSBmb3IgY2hhcmFjdGVyIGJyZWFrLgovLyBUYWtlIGZvcndhcmQgZGF0YSBmb3IgZXhhbXBsZSwgdGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSwKLy8gICAgRGlhZ3JhbSAxIDogdGhlIGZvcndhcmQgc3RhdGUgbWFjaGluZSBmb3IgYWNjZW50IGFuZCBiYXNlCi8vCi8vICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlbnQKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tCi8vICAgICAgICAgICAgYWNjZW50ICArLS0tLSsvICAgIFwKLy8gICAgICAgICAgIC0tLS0tLS0+IHxTSSsyfCAgICAgIHwKLy8gICAgICAgICAgLyAgICAgICAgICstLS0tKzwtLS0tLyAKLy8gICAgKy0tLS0rICAgICAgICAgICAgfCAgICAgICAgYmFzZSAgICAgICArLS0tLS0tLSsKLy8gMC0+fHN0b3B8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tPiB8U0lfc3RvcHwKLy8gICAgKy0tLS0rXC0tLS0tLS0+ICstLS0tKy0tLS0tLS0tLS0tLS0tPiArLS0tLS0tLSsKLy8gICAgICAgICAgICBiYXNlICAgIHxTSSsyfCAgICAgYmFzZSAgICAgICAKLy8gICAgICAgICAgICAgICAgICAgICstLS0tKwovLyAgICAgICAgICAgICAgICAgICAgXiAgICBcCi8vICAgICAgICAgICAgICAgICAgICB8ICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICBcLS0tLS8KLy8gICAgICAgICAgICAgICAgICAgIGFjY2VudAovLwovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgovLyBUaGUgZm9yd2FyZCB0cmFuc2l0aW9uIHN0YXRlcyBvZiBjaGFyYWN0ZXIgYm91bmRhcnkgZGF0YS4KVGV4dEJvdW5kYXJ5RGF0YTo6Tm9kZSBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRm9yd2FyZERhdGFbXSA9IHsKICAgICAgICAvLyBhY2N0ICAgICAgICAgYmFzZSAgICAgICAgICAgIGNyICAgICAgICAgICAgICBsZgogICAgICAgIC8vIGNobyAgICAgICAgICBqdW5nICAgICAgICAgICAgam9uZyAgICAgICAgICAgIEVPUwogICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLAogICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLAoKICAgICAgICAvLyAxCiAgICAgICAga1NJXzIsICAgICAgICAgIGtTSV8yLCAgICAgICAgICBrU0lfMywgICAgICAgICAga1NJXzcsCiAgICAgICAga1NJXzQsICAgICAgICAgIGtTSV81LCAgICAgICAgICBrU0lfNiwgICAgICAgICAga1NJX1N0b3AsCgogICAgICAgIC8vIDIKICAgICAgICBrU0lfMiwgICAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwKICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwKCiAgICAgICAgLy8gMwogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV83LAogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLAoKICAgICAgICAvLyA0CiAgICAgICAga1NJXzIsICAgICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsCiAgICAgICAga1NJXzQsICAgICAgICAgIGtTSV81LCAgICAgICAgICBrU0lfNiwgICAgICAgICAga1NJX1N0b3AsCgogICAgICAgIC8vIDUKICAgICAgICBrU0lfMiwgICAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwKICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJXzUsICAgICAgICAgIGtTSV82LCAgICAgICAgICBrU0lfU3RvcCwKCiAgICAgICAgLy8gNgogICAgICAgIGtTSV8yLCAgICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLAogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJXzYsICAgICAgICAgIGtTSV9TdG9wLAoKICAgICAgICAvLyA3CiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsCiAgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AKfTsKCmNvbnN0IGludDMyX3QgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckZvcndhcmREYXRhX2xlbmd0aCA9CiAgICBzaXplb2YoVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckZvcndhcmREYXRhKSAvIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRm9yd2FyZERhdGFbMF0pOwoKV29yZEJyZWFrVGFibGUqIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJGb3J3YXJkID0gbmV3IFdvcmRCcmVha1RhYmxlKGtDaGFyYWN0ZXJDb2xfY291bnQsIGtDaGFyYWN0ZXJGb3J3YXJkRGF0YSwga0NoYXJhY3RlckZvcndhcmREYXRhX2xlbmd0aCk7CgoKLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8KLy8gICAgRGlhZ3JhbSAyIDogdGhlIGJhY2t3YXJkIHN0YXRlIG1hY2hpbmUgZm9yIGFjY2VudCBhbmQgYmFzZQovLwovLyAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZW50Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLQovLyAgICAgICAgICAgIGFjY2VudCAgKy0tLS0rLyAgICBcCi8vICAgICAgICAgICAtLS0tLS0tPiB8U0krMXwgICAgICB8Ci8vICAgICAgICAgIC8gICAgICAgICArLS0tLSs8LS0tLS8gCi8vICAgICstLS0tKyAgICAgICAgICAgIHwgICAgICAgIGJhc2UgICAgICAgKy0tLS0tLS0rCi8vIDAtPnxzdG9wfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLT4gfFNJX3N0b3B8Ci8vICAgICstLS0tK1wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gKy0tLS0tLS0rCi8vICAgICAgICAgICAgICAgICAgICAgIGJhc2UgICAgICAgCi8vCi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi8vIFRoZSBiYWNrd2FyZCB0cmFuc2l0aW9uIHN0YXRlcyBvZiBjaGFyYWN0ZXIgYm91bmRhcnkgZGF0YS4KVGV4dEJvdW5kYXJ5RGF0YTo6Tm9kZSBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQmFja3dhcmREYXRhW10gPSB7CiAgICAgICAgLy8gYWNjdCAgICAgICAgIGJhc2UgICAgICAgICAgICBjciAgICAgICAgICAgICAgbGYKICAgICAgICAvLyBjaG8gICAgICAgICAganVuZyAgICAgICAgICAgIGpvbmcgICAgICAgICAgICBFT1MKICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwKICAgICAgICBrU3RvcCwgICAgICAgICAga1N0b3AsICAgICAgICAgIGtTdG9wLCAgICAgICAgICBrU3RvcCwKCiAgICAgICAgLy8gMQogICAgICAgIGtTSV8xLCAgICAgICAgICBrU0lfU3RvcCwgICAgICAga1NJX1N0b3AsICAgICAgIGtTSV8xLAogICAgICAgIGtTSV9TdG9wLCAgICAgICBrU0lfMSwgICAgICAgICAga1NJXzEsICAgICAgICAgIGtTSV9TdG9wCn07Cgpjb25zdCBpbnQzMl90IFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZERhdGFfbGVuZ3RoID0KICAgIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQmFja3dhcmREYXRhKSAvIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQmFja3dhcmREYXRhWzBdKTsKCldvcmRCcmVha1RhYmxlKiBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyQmFja3dhcmQgPSBuZXcgV29yZEJyZWFrVGFibGUoa0NoYXJhY3RlckNvbF9jb3VudCwga0NoYXJhY3RlckJhY2t3YXJkRGF0YSwga0NoYXJhY3RlckJhY2t3YXJkRGF0YV9sZW5ndGgpOwoKLy8gVGhlIGNoYXJhY3RlciB0eXBlIG1hcHBpbmcgb2YgdGhlIGJyZWFrIHRhYmxlLgpUZXh0Qm91bmRhcnlEYXRhOjpUeXBlIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJSYXdNYXBwaW5nW10gPSB7CiAgICAvLyBSZS1jb2RlZCB0byBtYXRjaCBVbmljb2RlIDIgdHlwZXMgW0xJVV0KICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gVU5BU1NJR05FRCAgICAgICAgICAgICAgID0gMCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gVVBQRVJDQVNFX0xFVFRFUiAgICAgICAgID0gMSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gTE9XRVJDQVNFX0xFVFRFUiAgICAgICAgID0gMiwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gVElUTEVDQVNFX0xFVFRFUiAgICAgICAgID0gMywKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gTU9ESUZJRVJfTEVUVEVSICAgICAgICAgID0gNCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gT1RIRVJfTEVUVEVSICAgICAgICAgICAgID0gNSwKICAgIGtBY2NlbnRfZGlhY3JpdGljLCAgLy8gTk9OX1NQQUNJTkdfTUFSSyAgICAgICAgID0gNiwKICAgIGtBY2NlbnRfZGlhY3JpdGljLCAgLy8gRU5DTE9TSU5HX01BUksgICAgICAgICAgID0gNywKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gQ09NQklOSU5HX1NQQUNJTkdfTUFSSyAgID0gOCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gREVDSU1BTF9ESUdJVF9OVU1CRVIgICAgID0gOSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gTEVUVEVSX05VTUJFUiAgICAgICAgICAgID0gMTAsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIE9USEVSX05VTUJFUiAgICAgICAgICAgICA9IDExLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBTUEFDRV9TRVBBUkFUT1IgICAgICAgICAgPSAxMiwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gTElORV9TRVBBUkFUT1IgICAgICAgICAgID0gMTMsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIFBBUkFHUkFQSF9TRVBBUkFUT1IgICAgICA9IDE0LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBDT05UUk9MICAgICAgICAgICAgICAgICAgPSAxNSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gRk9STUFUICAgICAgICAgICAgICAgICAgID0gMTYsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIFBSSVZBVEVfVVNFICAgICAgICAgICAgICA9IDE3LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBTVVJST0dBVEUgICAgICAgICAgICAgICAgPSAxOCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gREFTSF9QVU5DVFVBVElPTiAgICAgICAgID0gMTksCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIFNUQVJUX1BVTkNUVUFUSU9OICAgICAgICA9IDIwLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBFTkRfUFVOQ1RVQVRJT04gICAgICAgICAgPSAyMSwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gQ09OTkVDVE9SX1BVTkNUVUFUSU9OICAgID0gMjIsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIE9USEVSX1BVTkNUVUFUSU9OICAgICAgICA9IDIzLAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBNQVRIX1NZTUJPTCAgICAgICAgICAgICAgPSAyNCwKICAgIGtCYXNlRm9ybSwgICAgICAgICAgLy8gQ1VSUkVOQ1lfU1lNQk9MICAgICAgICAgID0gMjUsCiAgICBrQmFzZUZvcm0sICAgICAgICAgIC8vIE1PRElGSUVSX1NZTUJPTCAgICAgICAgICA9IDI2LAogICAga0Jhc2VGb3JtLCAgICAgICAgICAvLyBPVEhFUl9TWU1CT0wgICAgICAgICAgICAgPSAyNywKICAgIGtCYXNlRm9ybSAgICAgICAgICAgLy8gVU5ERUZJTkVEICAgICAgICAgICAgICAgID0gMjgKfTsKCmNvbnN0IGludDMyX3QgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlclJhd01hcHBpbmdfbGVuZ3RoID0KICAgIHNpemVvZihUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyUmF3TWFwcGluZykgLyBzaXplb2YoVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlclJhd01hcHBpbmdbMF0pOwoKU3BlY2lhbE1hcHBpbmcgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckV4Y2VwdGlvbkNoYXJbXSA9IHsKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpBU0NJSV9MSU5FRkVFRCwgVGV4dEJvdW5kYXJ5RGF0YTo6a0Jhc2VMRiksCiAgICAgICAgU3BlY2lhbE1hcHBpbmcoVGV4dEJvdW5kYXJ5RGF0YTo6QVNDSUlfQ0FSUklBR0VfUkVUVVJOLCBUZXh0Qm91bmRhcnlEYXRhOjprQmFzZUNSKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfQ0hPU0VPTkdfTE9XLCBUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfQ0hPU0VPTkdfSElHSCwgVGV4dEJvdW5kYXJ5RGF0YTo6a0Nob3Nlb25nKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfSlVOR1NFT05HX0xPVywgVGV4dEJvdW5kYXJ5RGF0YTo6SEFOR1VMX0pVTkdTRU9OR19ISUdILCBUZXh0Qm91bmRhcnlEYXRhOjprSnVuZ3Nlb25nKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpIQU5HVUxfSk9OR1NFT05HX0xPVywgVGV4dEJvdW5kYXJ5RGF0YTo6SEFOR1VMX0pPTkdTRU9OR19ISUdILCBUZXh0Qm91bmRhcnlEYXRhOjprSm9uZ3Nlb25nKSwKICAgICAgICBTcGVjaWFsTWFwcGluZyhUZXh0Qm91bmRhcnlEYXRhOjpQVU5DVFVBVElPTl9MSU5FX1NFUEFSQVRPUiwgVGV4dEJvdW5kYXJ5RGF0YTo6UFVOQ1RVQVRJT05fUEFSQUdSQVBIX1NFUEFSQVRPUiwgVGV4dEJvdW5kYXJ5RGF0YTo6a0Jhc2VMRiksCiAgICAgICAgU3BlY2lhbE1hcHBpbmcoVGV4dEJvdW5kYXJ5RGF0YTo6RU5EX09GX1NUUklORywgVGV4dEJvdW5kYXJ5RGF0YTo6a0VPUykKfTsKCmNvbnN0IGludDMyX3QgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckV4Y2VwdGlvbkNoYXJfbGVuZ3RoID0gCiAgICBzaXplb2YoVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckV4Y2VwdGlvbkNoYXIpIC8gc2l6ZW9mKFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJFeGNlcHRpb25DaGFyWzBdKTsKCmNvbnN0IGJvb2xfdCBUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRXhjZXB0aW9uRmxhZ3NbXSA9IHsKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga05vbkNoYXJhY3RlciAgICAgICAgICAgID0gMCwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga1VwcGVyY2FzZUxldHRlciAgICAgICAgID0gMSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0xvd2VyY2FzZUxldHRlciAgICAgICAgID0gMiwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga1RpdGxlY2FzZUxldHRlciAgICAgICAgID0gMywKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga01vZGlmaWVyTGV0dGVyICAgICAgICAgID0gNCwKICAgICAgICBUUlVFLCAgICAgICAgICAgLy8ga090aGVyTGV0dGVyICAgICAgICAgICAgID0gNSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga05vblNwYWNpbmdNYXJrICAgICAgICAgID0gNiwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0VuY2xvc2luZ01hcmsgICAgICAgICAgID0gNywKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0NvbWJpbmluZ1NwYWNpbmdNYXJrICAgID0gOCwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0RlY2ltYWxOdW1iZXIgICAgICAgICAgID0gOSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0xldHRlck51bWJlciAgICAgICAgICAgID0gMTAsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtPdGhlck51bWJlciAgICAgICAgICAgICA9IDExLAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrU3BhY2VTZXBhcmF0b3IgICAgICAgICAgPSAxMiwKICAgICAgICBUUlVFLCAgICAgICAgICAgLy8ga0xpbmVTZXBhcmF0b3IgICAgICAgICAgID0gMTMsCiAgICAgICAgVFJVRSwgICAgICAgICAgIC8vIGtQYXJhZ3JhcGhTZXBhcmF0b3IgICAgICA9IDE0LAogICAgICAgIFRSVUUsICAgICAgICAgICAvLyBrQ29udHJvbENoYXJhY3RlciAgICAgICAgPSAxNSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0Zvcm1hdENoYXJhY3RlciAgICAgICAgID0gMTYsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtQcml2YXRlVXNlQ2hhcmFjdGVyICAgICA9IDE3LAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrU3Vycm9nYXRlICAgICAgICAgICAgICAgPSAxOCwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0Rhc2hQdW5jdHVhdGlvbiAgICAgICAgID0gMTksCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtPcGVuUHVuY3R1YXRpb24gICAgICAgICA9IDIwLAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrQ2xvc2VQdW5jdHVhdGlvbiAgICAgICAgPSAyMSwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0Nvbm5lY3RvclB1bmN0dWF0aW9uICAgID0gMjIsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtPdGhlclB1bmN0dWF0aW9uICAgICAgICA9IDIzLAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrTWF0aFN5bWJvbCAgICAgICAgICAgICAgPSAyNCwKICAgICAgICBGQUxTRSwgICAgICAgICAgLy8ga0N1cnJlbmN5U3ltYm9sICAgICAgICAgID0gMjUsCiAgICAgICAgRkFMU0UsICAgICAgICAgIC8vIGtNb2RpZmllclN5bWJvbCAgICAgICAgICA9IDI2LAogICAgICAgIEZBTFNFLCAgICAgICAgICAvLyBrT3RoZXJTeW1ib2wgICAgICAgICAgICAgPSAyNwogICAgICAgIEZBTFNFICAgICAgICAgICAvLyBVTkRFRklORUQgICAgICAgICAgICAgICAgPSAyOCwKICAgIH07CgpUZXh0Qm91bmRhcnlEYXRhOjpUeXBlIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJBc2NpaVZhbHVlc1tdID0gewogICAgICAgIC8vICBudWxsICAgICAgIHNvaCAgICAgICAgc3R4ICAgICAgICBldHggICAgICAgIGVvdCAgICAgICAgZW5xICAgICAgICBhc2sgICAgICAgIGJlbGwKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGJzICAgICAgICAgaHQgICAgICAgICBsZiAgICAgICAgIHZ0ICAgICAgICAgZmYgICAgICAgICBjciAgICAgICAgIHNvICAgICAgICAgc2kKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlTEYsICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlQ1IsICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGRsZSAgICAgICAgZGMxICAgICAgICBkYzIgICAgICAgIGRjMyAgICAgICAgZGM0ICAgICAgICBuYWsgICAgICAgIHN5biAgICAgICAgZXRiCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBjYW4gICAgICAgIGVtICAgICAgICAgc3ViICAgICAgICBlc2MgICAgICAgIGZzICAgICAgICAgZ3MgICAgICAgICBycyAgICAgICAgIHVzCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBzcCAgICAgICAgICEgICAgICAgICAgIiAgICAgICAgICAjICAgICAgICAgICQgICAgICAgICAgJSAgICAgICAgICAmICAgICAgICAgICcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gICggICAgICAgICAgKSAgICAgICAgICAqICAgICAgICAgICsgICAgICAgICAgLCAgICAgICAgICAtICAgICAgICAgIC4gICAgICAgICAgLwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgMCAgICAgICAgICAxICAgICAgICAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgIDUgICAgICAgICAgNiAgICAgICAgICA3CiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICA4ICAgICAgICAgIDkgICAgICAgICAgOiAgICAgICAgICA7ICAgICAgICAgIDwgICAgICAgICAgPSAgICAgICAgICA+ICAgICAgICAgID8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIEAgICAgICAgICAgQSAgICAgICAgICBCICAgICAgICAgIEMgICAgICAgICAgRCAgICAgICAgICBFICAgICAgICAgIEYgICAgICAgICAgRwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgSCAgICAgICAgICBJICAgICAgICAgIEogICAgICAgICAgSyAgICAgICAgICBMICAgICAgICAgIE0gICAgICAgICAgTiAgICAgICAgICBPCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBQICAgICAgICAgIFEgICAgICAgICAgUiAgICAgICAgICBTICAgICAgICAgIFQgICAgICAgICAgVSAgICAgICAgICBWICAgICAgICAgIFcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIFggICAgICAgICAgWSAgICAgICAgICBaICAgICAgICAgIFsgICAgICAgICAgXCAgICAgICAgICBdICAgICAgICAgIF4gICAgICAgICAgXwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgYCAgICAgICAgICBhICAgICAgICAgIGIgICAgICAgICAgYyAgICAgICAgICBkICAgICAgICAgIGUgICAgICAgICAgZiAgICAgICAgICBnCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBoICAgICAgICAgIGkgICAgICAgICAgaiAgICAgICAgICBrICAgICAgICAgIGwgICAgICAgICAgbSAgICAgICAgICBuICAgICAgICAgIG8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIHAgICAgICAgICAgcSAgICAgICAgICByICAgICAgICAgIHMgICAgICAgICAgdCAgICAgICAgICB1ICAgICAgICAgIHYgICAgICAgICAgdwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgeCAgICAgICAgICB5ICAgICAgICAgIHogICAgICAgICAgeyAgICAgICAgICB8ICAgICAgICAgIH0gICAgICAgICAgfiAgICAgICAgICBkZWwKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybAogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybCAgICAgICBjdHJsICAgICAgIGN0cmwgICAgICAgY3RybAogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgbmJzcCAgICAgICChICAgICAgICAgIKIgICAgICAgICAgoyAgICAgICAgICCkICAgICAgICAgIKUgICAgICAgICAgpgogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgqCAgICAgICAgICCpICAgICAgICAgIKogICAgICAgICAgqyAgICAgICAgICCsICAgICAgICAgIK0gICAgICAgICAgriAgICAgICAgICCvCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICCwICAgICAgICAgILEgICAgICAgICAgsiAgICAgICAgICCzICAgICAgICAgILQgICAgICAgICAgtSAgICAgICAgICC2ICAgICAgICAgILcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gILggICAgICAgICAguSAgICAgICAgICC6ICAgICAgICAgILsgICAgICAgICAgvCAgICAgICAgICC9ICAgICAgICAgIL4gICAgICAgICAgvwogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAgwCAgICAgICAgICDBICAgICAgICAgIMIgICAgICAgICAgwyAgICAgICAgICDEICAgICAgICAgIMUgICAgICAgICAgxiAgICAgICAgICDHCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICDIICAgICAgICAgIMkgICAgICAgICAgyiAgICAgICAgICDLICAgICAgICAgIMwgICAgICAgICAgzSAgICAgICAgICDOICAgICAgICAgIM8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gINAgICAgICAgICAg0SAgICAgICAgICDSICAgICAgICAgINMgICAgICAgICAg1CAgICAgICAgICDVICAgICAgICAgINYgICAgICAgICAg1wogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAg2CAgICAgICAgICDZICAgICAgICAgINogICAgICAgICAg2yAgICAgICAgICDcICAgICAgICAgIN0gICAgICAgICAg3iAgICAgICAgICDfCiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICDgICAgICAgICAgIOEgICAgICAgICAg4iAgICAgICAgICDjICAgICAgICAgIOQgICAgICAgICAg5SAgICAgICAgICDmICAgICAgICAgIOcKICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sCiAgICAgICAgLy8gIOggICAgICAgICAg6SAgICAgICAgICDqICAgICAgICAgIOsgICAgICAgICAg7CAgICAgICAgICDtICAgICAgICAgIO4gICAgICAgICAg7wogICAgICAgICAgICBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwKICAgICAgICAvLyAg8CAgICAgICAgICDxICAgICAgICAgIPIgICAgICAgICAg8yAgICAgICAgICD0ICAgICAgICAgIPUgICAgICAgICAg9iAgICAgICAgICD3CiAgICAgICAgICAgIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLAogICAgICAgIC8vICD4ICAgICAgICAgIPkgICAgICAgICAg+iAgICAgICAgICD7ICAgICAgICAgIPwgICAgICAgICAg/SAgICAgICAgICD+ICAgICAgICAgIP8KICAgICAgICAgICAga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0sIGtCYXNlRm9ybSwga0Jhc2VGb3JtLCBrQmFzZUZvcm0KfTsKCgoKVW5pY29kZUNsYXNzTWFwcGluZyogVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3Rlck1hcCA9IAogICAgbmV3IFVuaWNvZGVDbGFzc01hcHBpbmcoa0NoYXJhY3RlclJhd01hcHBpbmcsIGtDaGFyYWN0ZXJSYXdNYXBwaW5nX2xlbmd0aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ2hhcmFjdGVyRXhjZXB0aW9uQ2hhciwga0NoYXJhY3RlckV4Y2VwdGlvbkNoYXJfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga0NoYXJhY3RlckV4Y2VwdGlvbkZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga0NoYXJhY3RlckFzY2lpVmFsdWVzICk7CgovKioKICogVGhpcyBpcyB0aGUgc2luZ2xlIGluc3RhbmNlIG9mIFRleHRCb3VuZGFyeURhdGEgY29udGFpbmluZyBjaGFyYWN0ZXIKICogYnJlYWsgZGF0YS4KICovCmNvbnN0IFRleHRCb3VuZGFyeURhdGEgVGV4dEJvdW5kYXJ5RGF0YTo6a0NoYXJhY3RlckJyZWFrRGF0YShUZXh0Qm91bmRhcnlEYXRhOjprQ2hhcmFjdGVyRm9yd2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJCYWNrd2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRCb3VuZGFyeURhdGE6OmtDaGFyYWN0ZXJNYXApOwoKLy9lb2YK