Q3VybCBhbmQgbGliY3VybCA3LjEyLjIKCiBQdWJsaWMgY3VybCByZWxlYXNlIG51bWJlcjogICAgICAgICAgICAgICA4MwogUmVsZWFzZXMgY291bnRlZCBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmluZzogMTEwCiBBdmFpbGFibGUgY29tbWFuZCBsaW5lIG9wdGlvbnM6ICAgICAgICAgICA5NgogQXZhaWxhYmxlIGN1cmxfZWFzeV9zZXRvcHQoKSBvcHRpb25zOiAgICAgMTIxCiBOdW1iZXIgb2YgcHVibGljIGZ1bmN0aW9ucyBpbiBsaWJjdXJsOiAgICAzNgogQW1vdW50IG9mIHB1YmxpYyB3ZWIgc2l0ZSBtaXJyb3JzOiAgICAgICAgMTMKIE51bWJlciBvZiBrbm93biBsaWJjdXJsIGJpbmRpbmdzOiAgICAgICAgIDI3CgpUaGlzIHJlbGVhc2UgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgoKIG8gdGhlIElETiBjb2RlIG5vdyB2ZXJpZmllcyB0aGF0IG9ubHkgVExELWxlZ2l0bWF0ZSBsZXR0ZXJzIGFyZSB1c2VkIGluIHRoZQogICBuYW1lIG9yIGEgd2FybmluZyBpcyBkaXNwbGF5ZWQgKHdoZW4gdmVyYm9zZSBpcyBlbmFibGVkKQogbyBwcm92aWRlcyBlcnJvciB0ZXh0cyBmb3IgSUROIGVycm9ycwogbyBmaWxlIHVwbG9hZCBwYXJ0cyBpbiBmb3JtcG9zdHMgbm93IGdldCB0aGVpciBkaXJlY3RvcnkgbmFtZXMgY3V0IG9mZgogbyBhZGRlZCBDVVJMSU5GT19PU19FUlJOTwogbyBhZGRlZCBDVVJMT1BUX0ZUUFNTTEFVVEggdG8gYWxsb3cgZnRwIGNvbm5lY3RzIHRvIGF0dGVtcHQgIkFVVEggVExTIiBpbnN0ZWFkCiAgIGJlZm9yZSAiQVVUSCBTU0wiCiBvIGN1cmxfZ2V0ZGF0ZSgpIGNvbXBsZXRlbHkgcmV3cml0dGVuOiBtYXkgYWZmZWN0IHJhcmUgY3VybCAteiB1c2UgY2FzZXMKClRoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGJ1Z2ZpeGVzOgoKIG8gQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUyB3b3JrcyBmb3IgdGhpcmQgcGFydHkgdHJhbnNmZXJzCiBvIG1lbW9yeSBsZWFrIGZvciBjb29raWVzIHJlY2VpdmVkIHdpdGggbWF4LWFnZSBzZXQKIG8gcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBpbiB0aGUgd2luZG93IG5hbWUgcmVzb2x2ZXIKIG8gVVJMcyB3aXRoID8tbGV0dGVycyBpbiB0aGUgdXNlciBuYW1lIG9yIHBhc3N3b3JkIGZpZWxkcwogbyBsaWJjdXJsIGVycm9yIG1lc3NhZ2UgaXMgbm93IHByb3ZpZGVkIHdoZW4gc2VuZCgpIGZhaWxzCiBvIG5vIG1vcmUgU0lHUElQRSBvbiBNYWMgT1MgWCBhbmQgb3RoZXIgU09fTk9TSUdQSVBFLXN1cHBvcnRpbmcgcGxhdGZvcm1zCiBvIEhUVFAgcmVzdW1lIHdhcyByZWZ1c2VkIGlmIHJlZGlyZWN0ZWQKIG8gY29uZmlndXJlJ3MgZ2V0aG9zdGJ5bmFtZSBjaGVjayB3aGVuIGJvdGggbnNsIGFuZCBzb2NrZXQgbGlicyBhcmUgcmVxdWlyZWQKIG8gY29uZmlndXJlIC0td2l0aC1saWJpZG4gbm93IGNoZWNrcyB0aGUgZ2l2ZW4gcGF0aCBiZWZvcmUgZGVmYXVsdHMKIG8gYSByYWNlIGNvbmRpdGlvbiBzb21ldGltZXMgcmVzdWx0aW5nIGluIENVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUIGluIHRoZQogICB3aW5kb3dzIHRocmVhZGVkIG5hbWUgcmVzb2x2ZXIgY29kZQogbyBpc3NwYWNlKCkgaW52b2tlcyB3aXRoIG5lZ2F0aXZlIHZhbHVlcyBpbiB0aGUgY29va2llIGNvZGUKIG8gYSBjYXNlIG9mIHJlYWQtYWxyZWFkeS1mcmVlZC1kYXRhIHdoZW4gQ1VSTE9QVF9WRVJCT1NFIGlzIHVzZWQgYW5kIGEgKHZlcnkpCiAgIHBlcnNpc3RlbnQgY29ubmVjdGlvbgogbyBub3cgaW5jbHVkZXMgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZXMgZm9yIElETiBlcnJvcnMKIG8gbW9yZSBmb3JnaXZuaW5nIFBBU1MgcmVzcG9uc2UgY29kZSBjaGVjayBmb3IgYmV0dGVyIHdvcmtpbmcgd2l0aCBwcm9mdHBkCiBvIGN1cmwvbXVsdGkuaCB3b3JrcyBiZXR0ZXIgaW5jbHVkZWQgaW4gd2luc29jay11c2luZyBhcHBzCiBvIGN1cmxfZWFzeV9yZXNldCgpIG5vIGxvbmdlciBlbmFibGVzIHRoZSBwcm9ncmVzcyBtZXRlcgogbyBidWlsZCBmaXggZm9yIFNTTCBkaXNhYmxlZCBjdXJsIHdpdGggU1NMIEVuZ2luZSBzdXBwb3J0IHByZXNlbnQKIG8gY29uZmlndXJlIC0td2l0aC1zc2w9UEFUSCBub3cgaWdub3JlcyBwa2ctY29uZmlnIHBhdGggaW5mbwogbyBDVVJMT1BUX1NTTEVOR0lORSBjYW4gYmUgc2V0IHRvIE5VTEwgZXZlbiBpZiBubyBlbmdpbmUgc3VwcG9ydCBpcyBhdmFpbGFibGUKIG8gTERBUCBjcmFzaCB3aGVuIG1vcmUgdGhhbiBvbmUgcmVjb3JkIHdhcyByZWNlaXZlZAogbyBjb25uZWN0IGZhaWx1cmVzIHByb3Blcmx5IHN0b3JlcyBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBlcnJvcmJ1ZmZlcgogbyBSYXJlIExvY2F0aW9uOi1mb2xsb3dpbmcgcHJvYmxlbSB3aXRoIGJhZCBvcmlnaW5hbCBVUkwKIG8gLUYgY2FuIG5vdyBhZGQgQ29udGVudC1UeXBlIG9uIG5vbi1maWxlIHNlY3Rpb25zCiBvIGRvdWJsZSBIb3N0OiBoZWFkZXIgd2hlbiBmb2xsb3dpbmcgTG9jYXRpb246IHdpdGggcmVwbGFjZWQgSG9zdDoKIG8gY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgcmV0dXJuIGNvZGUKIG8gIlByb3h5LUNvbm5lY3Rpb246IGNsb3NlIiBpcyBub3cgdW5kZXJzdG9vZCBhbmQgcHJvcGVybHkgZGVhbHQgd2l0aAogbyBjdXJsX2dldGRhdGUoKSBjcmFzaAogbyBkb3dubG9hZGluZyBlbXB0eSBmaWxlcyBub3cgY2FsbHMgdGhlIHdyaXRlIGNhbGxiYWNrIHByb3Blcmx5CiBvIG5vIHJldmVyc2UgRE5TIGxvb2t1cHMgZm9yIGlwLW9ubHkgYWRkcmVzc2VzIHdpdGggaXB2Ni1lbmFibGVkIGxpYmN1cmwKIG8gZmlsZSBoYW5kbGVyIGxlYWsgd2hlbiBnZXR0aW5nIGFuIGVtcHR5IGZpbGU6Ly8gVVJMCiBvIGxpYmN1cmwgd29ya3MgYmV0dGVyIG11bHRpLXRocmVhZGVkIG9uIEFJWCAod2hlbiBidWlsdCB3aXRoIHhsYykKIG8gY29va2llcyBvdmVyIHByb3h5IGRpZG4ndCBtYXRjaCB0aGUgcGF0aCBwcm9wZXJseQogbyBNU1ZDIG1ha2VmaWxlIGZpeGVzIHRvIGJ1aWxkIGJldHRlcgogbyBGVFAgcmVzcG9uc2UgNTMwIG9uICdQQVNTJyBub3cgc2VuZHMgYmFjayBhIGJldHRlciBlcnJvciBtZXNzYWdlCgpPdGhlciBjdXJsLXJlbGF0ZWQgbmV3cyBzaW5jZSB0aGUgcHJldmlvdXMgcHVibGljIHJlbGVhc2U6CgogbyBBZGFjVVJMIHZlcnNpb24gNy4xMi4xIGh0dHA6Ly93d3cuYWxtcm90aC5jb20vYWRhY3VybC9pbmRleC5odG1sCiBvIHB5Y3VybCB2ZXJzaW9uIDcuMTIuMSBodHRwOi8vcHljdXJsLnNvdXJjZWZvcmdlLm5ldC8KIG8gdGNsY3VybCB2ZXJzaW9uIDAuMTIuMQogICBodHRwOi8vcGVyc29uYWwxLmlkZGVvLmVzL2FuZHJlc2dhcmNpL3RjbGN1cmwvZW5nbGlzaC8KIG8gbGliY3VybC5ORVQgd2FzIGFubm91bmNlOiBodHRwOi8vd3d3LnNlYXNpZGVyZXNlYXJjaC5jb20vZG93bmxvYWRzLmh0bWwKIG8gR2V0IHlvdXIgZnJlc2ggTW96aWxsYS1leHRyYWN0ZWQgY2EgY2VydCBidW5kbGUgaGVyZToKICAgaHR0cDovL2N1cmwuaGF4eC5zZS9kb2NzL2NhZXh0cmFjdC5odG1sCiBvIE5ldyB3ZWIgbWlycm9yIGluIFRhaXdhbjogaHR0cDovL2N1cmwuY3MucHUuZWR1LnR3LwoKVGhpcyByZWxlYXNlIHdvdWxkIG5vdCBoYXZlIGxvb2tlZCBsaWtlIHRoaXMgd2l0aG91dCBoZWxwLCBjb2RlLCByZXBvcnRzIGFuZAphZHZpY2UgZnJvbSBmcmllbmRzIGxpa2UgdGhlc2U6CgogQ2FzZXkgTydEb25uZWxsLCBSb2xhbmQgS3Jpa2F2YSwgQWxleCwgQWxleGFuZGVyIEtyYXNub3N0YXZza3ksIEtqZXRpbAogSmFjb2JzZW4sIExpbmcgVGhpbywgUm9tYW4gS29pZm1hbiwgSGFyc2hhbCBQcmFkaGFuLCBKb25hcyBGb3JzbWFuLCBEYXZpZAogVGFyZW5kYXNoLCBEYW5pZWwgYXQgdG91Y2h0dW5lcywgQmVydHJhbmQgRGVtaWRkZWxhZXIsIEFuZHJlYXMgUmlla2UsCiBKZWFuLUNsYXVkZSBDaGF1dmUsIERhbiBGYW5kcmljaCwgUGV0ZXIgU3lsdmVzdGVyLCAiTWVrb25pa3VtIiwgSmVhbi1QaGlsaXBwZQogQmFycmV0dGUtTGFQaWVycmUsIEf8bnRlciBLbmF1ZiwgTGFycnkgQ2FtcGJlbGwsIEZlZG9yIEthcnBlbGV2aXRjaCwKIEFsZWtzYW5kYXIgTWlsaXZvamV2aWMsIEdpc2xlIFZhbmVtLCBDaHJpcyAiQm9iIEJvYiIsIENoaWgtQ2h1bmcgQ2hhbmcsIEFuZHkKIENlZGlsbmlrLCBBbGFuIFBpbnN0ZWluLCBFcmljIFZlcmduYXVkLCBUcmFpYW4gTmljb2xlc2N1LCBydW5la2wgYXQKIG9wb2ludC5jb20KCiAgICAgICAgVGhhbmtzISAoYW5kIHNvcnJ5IGlmIEkgZm9yZ290IHRvIG1lbnRpb24gc29tZW9uZSkK