Skip to content

Latest commit

 

History

History
1 lines (1 loc) · 14 KB

cl71a65td00a0p0nvfwgzbd5t.md

File metadata and controls

1 lines (1 loc) · 14 KB

IyMgSW50cm9kdWN0aW9uIHRvIE5ob3N0CgojIyAxLiBXaGF0IGlzIE5ob3N0IPCfmYTwn5mECgoKIVtiYW5uZXIucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDgzNjM5Nzc1Ni9RQ1ctUkIxTEIucG5nIGFsaWduPSJsZWZ0IikKCk5ob3N0IGlzIHRoZSBvcGVuIHNvdXJjZSBHcmFwaFFMIGJhY2tlbmQgKEZpcmViYXNlIEFsdGVybmF0aXZlKSBhbmQgYSBkZXZlbG9wbWVudCBwbGF0Zm9ybS4gTmhvc3QgaXMgZG9pbmcgZm9yIHRoZSBiYWNrZW5kLCB3aGF0IE5ldGxpZnkgYW5kIFZlcmNlbCBhcmUgZG9pbmcgZm9yIHRoZSBmcm9udGVuZC4gTmhvc3QgcHJvdmlkZXMgYSBtb2Rlcm4gYmFja2VuZCB3aXRoIHRoZSBnZW5lcmFsIGJ1aWxkaW5nIGJsb2NrcyByZXF1aXJlZCB0byBidWlsZCBmYW50YXN0aWMgZGlnaXRhbCBwcm9kdWN0cy4gTmhvc3QgbWFrZSBpdCBlYXN5IHRvIGJ1aWxkIGFuZCBkZXBsb3kgdGhpcyBiYWNrZW5kIHVzaW5nIG91ciBwbGF0Zm9ybSB0aGF0IHRha2VzIGNhcmUgb2YgY29uZmlndXJhdGlvbiwgc2VjdXJpdHksIGFuZCBwZXJmb3JtYW5jZS4gCgojIyAyLiBGZWF0dXJlcyBvZiBOaG9zdCB0b29sIPCfjq8KCi0gSXQncyB0b3RhbGx5IG9wZW4gc291cmNlCgotIEl0IGlzIGF1dG9tYXRpY2FsbHkgbWFuYWdlcyB0aGUgYmFja2VuZCBzdHVmZnMgbGlrZSBzdG9yYWdlLCBzZXJ2ZXJsZXNzIGF1dGhlbnRpY2F0aW9uLCBHcmFwaFFMIEFQSSwgRGF0YWJhc2UuCgotIEl0J3MgYWxzbyBoYXZlIENMSSB0b29sCgotIEl0IHN1cHBvcnQgZ2l0aHViIGludGVncmF0aW9uIHRvIHdvcmtpbmcgaW4gcHJvamVjdCB2ZXJ5IGVhc2lseS4KCi0gSXQgd29ya3Mgd2l0aCBkaWZmZXJlbnQgbmljZSBmcmFtZXdvcmtzIGxpa2UgUmVhY3QsIG5ldGxpZnksIGZsdXR0ZXIgZXRjLgoKLSBBZnRlciB1c2luZyBOaG9zdCBpdCBjYW4gYXV0b21hdGljYWxseSBjcmF0ZXMgYSBkYXRhYmFzZSBzZXR1cCB1c2luZyBQb3N0Z3Jlc3FsLCBHcmFwaFFMIEFQSSBzZXR1cCB1c2luZyBIYXp1cmEgZm9yIHNvbWUgZmlsZSBzdG9yYWdlLCBhbHNvIGl0IGNyYXRlcyBhdXRoZW50aWNhdGlvbiBzZXR1cCBpbiAyNSBzZWMgb3IgbGVzcyB0aGFuIGEgbWludXRlLgoKIyMgMy4gV2h5IE5ob3N0IPCfkoHwn4+74oCN4pmC77iP8J+SgfCfj7vigI3imYDvuI8KCgpJbiB0aGUgZGV2ZWxvcG1lbnQgaW5kdXN0cnkgZGV2ZWxvcGVycyBhcmUgYmFzaWNhbGx5IGZvY3VzIG9uIEZyb250ZW5kIGFuZCBCYWNrZW5kIGRldmVsb3BtZW50LCBhbHNvIHRoZXJlIGFyZSBsb3RzIG9mIHRvb2xzIGFyZSBwcmVzZW50IGluIHRlY2ggbWFya2V0IHRvIG1hbmFnZSBvdXIgYXBwbGljYXRpb24gYXMgd2VsbC4gTm90IG9ubHkgbWFuYWdpbmcgYnV0IGFsc28gdGhlcmUgYXJlIGxvdHMgb2YgbGVhcm5pbmcsIGxhcmdlIGNvZGViYXNlIHVuZGVyc3RhbmRpbmcgYXJlIHByZXNlbnQgaW4gYm90aCBhcmVhIG9mIGZyb250ZW5kIGFuZCBiYWNrZW5kICBkZXZlbG9wbWVudC4gRGV2ZWxvcGVycyBhcmUgd29ycnkgdG8gbWFpbnRhaW4sIG1hbmFnZSBhbmQgYmFsYW5jZSBiZXR3ZWVuIGZyb250ZW5kIGFuZCBiYWNrZW5kIGRldmVsb3BtZW50IHNpbXVsdGFuZW91c2x5IGFsc28gZGVwbG95IHRoZSBhcHBsaWNhdGlvbiBpbiBwcm9kdWN0aW9uIGxldmVsIGlzIHZlcnkgY2hhbGxlbmdpbmcgZmFjdG9yLiAKCgohW0RiSnBpMW5sd1Q2SWpkajlQMDlvSE5vS25IcXd3bk1pMG5vbS5naWZdKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjYwOTIwNzk1MDk2Lzg5azBzdGNZRy5naWYgYWxpZ249ImxlZnQiKQoKSW4gZnJvbnRlbmQgd2UgYmFzaWNhbGx5IG1haW50YWluIGFuZCBkZXNpZ24gb3VyIHBhcnRpY3VsYXIgd2Vic2l0ZXMgdXNpbmcgcG9wdWxhciBwcm9ncmFtaW5nIGxhbmd1YWdlIGxpa2UgUmVhY3QsIEpTLCBIVE1MLCBDU1MsIEFuZ3VsYXIgZXRjLiBBbHNvIG1haW50YWluIHRoZXNlIGZyb250ZW5kIHN0dWZmIHdlIGJhc2ljYWxseSB1c2UgTmV0bGlmeSBhbmQgVmVyY2VsIHRoYXQgbWFrZXMgb3VyIHRhc2sgaGFzc2xlLWZyZWUuIEJ1dCB3aGF0IGlmIGEgZGV2ZWxvcGVyIGhhcyBub3QgYSBzcGVjaWZpYyBrbm93bGVkZ2UgYWJvdXQgYmFja2VuZCDwn5KB8J+Pu+KAjeKZgu+4jy4gRm9yIHRoaXMgcmVhc29uIGludHJvZHVjaW5nIG5ob3N0LCB0aGUgbW9zdCBwb3B1bGFyIGJhY2tlbmQgZGV2ZWxvcG1lbnQgdG9vbC4gSXQgY2FuIGVhc2lseSBtYW5hZ2UgYWxsIHRoZSBiYWNrZW5kIHN0dWZmcyBsaWtlIHN0b3JhZ2UsIGF1dGhlbnRpY2F0aW9uLCBzZXJ2ZXJsZXNzIGZ1bmN0aW9uIGFuZCBhbHNvIG1haW50YWluIHRoZSBzZWN1cml0eS4gIAoKCiFbSGtXTGw2VC5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjYwOTIxMDU2NDM2L0xtYTZpMkdHSC5wbmcgYWxpZ249ImxlZnQiKQoKTmhvc3QgPSBQb3N0Z3JlU1FMICsgSGFzdXJhJ3MgR3JhcGhRTCBFbmdpbmUgKyBIYXN1cmEgQmFja2VuZCBQbHVzCgotIG91dCBvZiB0aGUgYm94IGJhY2tlbmQgd2l0aCBhIHJlbGF0aW9uYWwgZGF0YWJhc2UsCi0gdXNlciBhdXRoZW50aWNhdGlvbgotIGRhdGEgc3RvcmFnZSwKLSBzZXJ2ZXJsZXNzIGZ1Y250aW9ucywKLSBHcmFwaFFMIEFQSS4KCiFbNjJsZXkxMmNhM3B6ZGVkNHJ0aWsucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDc5MjI3MTM4MC9YTElXdkZ0S3YucG5nIGFsaWduPSJsZWZ0IikKCiMjIDQuIEhvdyB0byBpbnN0YWxsIE5ob3N0IOKamQoKYGBgCm15LWFwcCAtLXRlbXBsYXRlIG5ob3N0LXF1aWNrc3RhcnQKYGBgCkFmdGVyIG1ha2UgeW91ciBhcHBsaWNhdGlvbiBqdW1wIHRvIGFwcGxpY2F0aW9uIGRpcmVjdG9yeSBhbmQgc3RhcnQgdGhlIGJhY2tlbmQuIApPciBzaW1wbHkgTG9nIGluIHRvIFtOaG9zdCBdKGh0dHBzOi8vYXBwLm5ob3N0LmlvL3NpZ251cCkgYW5kIHNpZ24gdXAgZm9yIGEgbmV3IGFjY291bnQgUHJlc3MgdGhlIE5ldyBBcHAgYnV0dG9uIG9uIHRoZSBjb25zb2xlJ3MgaG9tZSBwYWdlLiBDaG9vc2UgYSBuYW1lIGFuZCBwaWNrIHRoZSByZWdpb24gY2xvc2VzdCB0byB5b3VyIHVzZXJzLiBZb3UnbGwgYmUgYWxsIHNldCB3aXRoIHRoZSBEZWZhdWx0IFdvcmtzcGFjZSBhbmQgdGhlIEZyZWUgcGxhbiBmb3Igbm93LgoKCiFbbmV3LWFwcC5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjYwODc4NzE2MTc5L29lQzl2elJjbS5wbmcgYWxpZ249ImxlZnQiKQoKTm93IGp1bXAgdG8geW91ciBjcmVhdGVkIGFwcGxpY2F0aW9uIGZvbGRlciBhbmQgcnVuIHRoaXMgY29tbWFuZCAKCmBgYApjZCBteS1hcHAKbnBtIHN0YXJ0CmBgYAoKTm93IHdlIGFyZSBjb25uZWN0ZWQgb3VyIE5ob3N0IHRvIGJhY2tlbmQgYXMgd2VsbCwgc28gdG8gY29uZmlndXJlIE5ob3N0IHRvIFJlYWN0IGFwcGxpY2F0aW9uIHdlIHdpbGwgdXNlIHRoZSBSZWFjdCBTREsgdGhhdCBpcyBwcm92aWRlZCB0byB1cyBieSBOaG9zdC4gU28sIGl0J3MgYmFzaWNhbGx5IGEgd3JhcHBlciBhcm91bmQgYSBOaG9zdCBqYXZhIFNESyB3aGljaCBpcyBhIHdheSB0byBpbnRlcmFjdCB3aXRoIHRoZSBOaG9zdCBiYWNrZW5kIHVzaW5nIGhvb2tzIGluIFJlYWN0LgoKYGBgCm5wbSBpbnN0YWxsIEBuaG9zdC9yZWFjdCBncmFwaHFsCmBgYApGaW5hbGx5IG9wZW4gdGhlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlIGluIFZpc3VhbFN0dWRpbyBhbmQgbWFkZSBjaGFuZ2VzIGFzIHdlbGwuCgojIyA1LiBIb3cgdG8gdXNlIGFuZCBkZXBsb3kgYW4gYXBwbGljYXRpb24gdXNpbmcgTmhvc3Qg8J+agAoKLSAqKlNldHVwKioKTWFrZSBzdXJlIHlvdSBoYXZlIE5vZGUuanMgYW5kIG5wbSBvciBZYXJuIGluc3RhbGxlZC4KCkNyZWF0ZSBhIG5ldyBmb2xkZXIgY2FsbGVkIG5ob3N0LXRvZG9zLCBpbml0aWFsaXplIGEgbmV3IEphdmFTY3JpcHQgYXBwIHRoZXJlLCBhbmQgaW5zdGFsbCB0aGUgTmhvc3QgSmF2YVNjcmlwdCBTREs6CgpgYGAKbnBtIGluaXQgLXkKbnBtIGluc3RhbGwgQG5ob3N0L25ob3N0LWpzIGdyYXBocWwKYGBgCgp1c2luZyAgWWFybgoKYGBgCnlhcm4gaW5pdCAteQp5YXJuIGFkZCBAbmhvc3Qvbmhvc3QtanMgZ3JhcGhxbApgYGAKCllvdSBtaWdodCBoYXZlIHRvIGVkaXQgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGFuZCBhZGQvY2hhbmdlIHRoZSB0eXBlIG9iamVjdCB0byBtb2R1bGUKYGBgCigidHlwZSI6ICJtb2R1bGUiKQpgYGAKCi0gKipJbml0aWFsaXplIE5ob3N0KioKSW4gdGhlIG5ldyBkaXJlY3RvcnksIGNyZWF0ZSBhIGZpbGUgY2FsbGVkIGluZGV4LmpzLgoKRW50ZXIgdGhlIGZvbGxvd2luZyBjb2RlIGludG8gdGhpcyBmaWxlLiBJdCB3aWxsIGluaXRpYWxpemUgYSBuZXcgSmF2YVNjcmlwdCBjbGllbnQgdGhhdCB3aWxsIGludGVyYWN0IHdpdGggeW91ciBiYWNrZW5kOgoKYGBgCmltcG9ydCB7IE5ob3N0Q2xpZW50IH0gZnJvbSAnQG5ob3N0L25ob3N0LWpzJzsKCmNvbnN0IG5ob3N0ID0gbmV3IE5ob3N0Q2xpZW50KHsKICBiYWNrZW5kVXJsOiAnaHR0cHM6Ly9bYXBwLXN1YmRvbWFpbl0ubmhvc3QucnVuJywgLy8gcmVwbGFjZSB0aGlzIHdpdGggdGhlIGJhY2tlbmQgVVJMIG9mIHlvdXIgYXBwCn0pOwoKY29uc29sZS5sb2cobmhvc3QuZ3JhcGhxbC5nZXRVcmwoKSk7CmBgYApSdW4gdGhlIGNvZGUgaW4geW91ciB0ZXJtaW5hbC4gWW91IHNob3VsZCBzZWUgeW91ciBhcHAncyBHcmFwaFFMIGVuZHBvaW50IFVSTDoKYGBgCuKenCBub2RlIGluZGV4LmpzCgpodHRwczovL1thcHAtc3ViZG9tYWluXS5uaG9zdC5ydW4vdjEvZ3JhcGhxbApgYGAKCgotICoqUXVlcnkgdG9kb3MqKgpJZiB5b3Ugbm93IGFkZCB0aGUgZm9sbG93aW5nIEdyYXBoUUwgcXVlcnkgdG8gdGhlIGNsaWVudCwgbGV0J3Mgc2VlIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBydW4gdGhlIHVwZGF0ZWQgdmVyc2lvbjoKCmBgYAppbXBvcnQgeyBOaG9zdENsaWVudCB9IGZyb20gJ0BuaG9zdC9uaG9zdC1qcyc7Cgpjb25zdCBuaG9zdCA9IG5ldyBOaG9zdENsaWVudCh7CiAgYmFja2VuZFVybDogJ2h0dHBzOi8vW2FwcC1zdWJkb21haW5dLm5ob3N0LnJ1bicsCn0pKGFzeW5jICgpID0+IHsKICAvLyBuaG9zdC5ncmFwaHFsLnJlcXVlc3QgcmV0dXJucyBhIHByb21pc2UsIHNvIHdlIHVzZSBhd2FpdCBoZXJlCiAgY29uc3QgdG9kb3MgPSBhd2FpdCBuaG9zdC5ncmFwaHFsLnJlcXVlc3QoYAogICAgcXVlcnkgewogICAgICB0b2RvcyB7CiAgICAgICAgaWQKICAgICAgICBjcmVhdGVkX2F0CiAgICAgICAgbmFtZQogICAgICAgIGlzX2NvbXBsZXRlZAogICAgICB9CiAgICB9CiAgYCk7CgogIC8vIFByaW50IHRvZG9zIHRvIGNvbnNvbGUKICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0b2Rvcy5kYXRhLCBudWxsLCAyKSk7Cn0pKCk7CgpgYGAKCmBgYArinpwgbm9kZSBpbmRleC5qcwoKbnVsbApgYGAKbnVsbCBpcyBwcmludGVkIGJlY2F1c2UgV2hpbGUgdXNpbmcgdGhlIEhhc3VyYSBDb25zb2xlLCB5b3UgY291bGQgZmV0Y2ggdGhlIHRvZG9zIGJlY2F1c2UgdGhlIGFkbWluIHJvbGUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGJ1dCB3aGVuIGJ1aWxkaW5nIHlvdXIgYXBwbGljYXRpb25zIHdpdGggYSBjbGllbnQsIHlvdSB3YW50IHRvIGRlZmluZSBwZXJtaXNzaW9ucyB1c2luZyByb2xlcyB0aGF0IHlvdXIgdXNlcnMgY2FuIGFzc3VtZSB3aGVuIG1ha2luZyByZXF1ZXN0cy4KCgotICoqVW5hdXRoZW50aWNhdGVkIHVzZXJzKioKVXNlIHRoZSBwdWJsaWMgcm9sZSBpbiBwZXJtaXNzaW9ucyB3aGVuIHlvdSB3YW50IHNvbWUgZGF0YSB0byBiZSBhY2Nlc3NlZCBieSBhbnlvbmUgd2l0aG91dCBiZWluZyBzaWduZWQgaW4uIFRoZSBwdWJsaWMgcm9sZSBpcyB0aGUgZGVmYXVsdCByb2xlIGluIGFsbCB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMuCgoqKlNldHRpbmcgcHVibGljIHBlcm1pc3Npb25zKioKSW4gSGFzdXJhIENvbnNvbGUsIGdvIHRvIHRoZSBEYXRhIHRhYiwgY2xpY2sgb24gdGhlIHRvZG9zIHRhYmxlLCB0aGVuIGNsaWNrIFBlcm1pc3Npb25zLiBBZGQgYSBuZXcgcm9sZSBjYWxsZWQgcHVibGljIGFuZCBjbGljayBvbiBzZWxlY3QuCgoKIVtwZXJtaXNzaW9ucy1wdWJsaWMtc2VsZWN0LnBuZ10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NjA4ODE3NTgwMTgvZDR3U0Zsb2hRLnBuZyBhbGlnbj0ibGVmdCIpCgoKLSAqKk9wZW4gSGFzdXJhIENvbnNvbGUqKgpIYXN1cmEgZ2VuZXJhdGVzIHJlYWwtdGltZSBHcmFwaFFMIEFQSXMsIGJ1dCBpdCBhbHNvIHByb3ZpZGVzIGEgd2ViIGNvbnNvbGUgZm9yIG1hbmlwdWxhdGluZyB0aGUgc2NoZW1hIGFuZCBkYXRhIG9mIHlvdXIgZGF0YWJhc2UuIEhlcmUgbWFrZSBzdXJlIGdvIHRvIHRoZSBEYXRhIHRhYiBvbiB5b3VyIGFwcCdzIGRhc2hib2FyZCBhbmQgc2VsZWN0IE9wZW4gSGFzdXJhLiBSZW1lbWJlciB0byBjb3B5IHRoZSBhZG1pbiBzZWNyZXQuCgoKCiFbZGF0YS10YWIucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDg4MTg2MjkwNC85cTB0MjB4RmIucG5nIGFsaWduPSJsZWZ0IikKCi0gKipVc2VycyB0YWJsZSoqCllvdSBzaG91bGQgc2VlIGFsbCB5b3VyIGRhdGFiYXNlIHRhYmxlcyBvbiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIHNjcmVlbi4gWW91IHNob3VsZCBzZWUgbXVsdGlwbGUgZGlmZmVyZW50IHNjaGVtYXMgZGlzcGxheWVkIGFzIGZvbGRlcnM6CgoKIVtsaXN0LW9mLXNjaGVtYXMucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDg4MzUyMDAwNi9DRmNzZVN5SHoucG5nIGFsaWduPSJsZWZ0IikKCi0gKipJbnNlcnQgZGF0YSoqCkdvIHRvIHRoZSBJbnNlcnQgUm93IHRhYiB0byBhZGQgc29tZSBkYXRhIHRvIHlvdXIgZGF0YWJhc2UuCgohW2V6Z2lmLmNvbS1naWYtbWFrZXIgKDEpLmdpZl0oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NjA4ODE5Nzk3MzIvUUs4QlNEVU9wLmdpZiBhbGlnbj0ibGVmdCIpCgoKLSAqKkF1dGhlbnRpY2F0aW9uKioKSW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIHlvdSBkZWZpbmVkIHNlbGVjdCBwZXJtaXNzaW9ucyBmb3IgdGhlIHB1YmxpYyByb2xlLiBZb3Ugd2lsbCBub3cgYWRkIGluc2VydCBhbmQgc2VsZWN0IHBlcm1pc3Npb25zIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzIHRvIHNlY3VyZSB5b3VyIGFwcCdzIEdyYXBoUUwgQVBJIHdpdGggYXV0aGVudGljYXRpb24uCgoqKkluc2VydCBhIHRlc3QgdXNlcioqCk1hbnVhbGx5IGNyZWF0ZSBhIHVzZXIgYnkgZ29pbmcgdG8geW91ciBhcHAncyBVc2VycyB0YWIgKHRvcCBtZW51KSBhbmQgY2xpY2tpbmcgb24gQWRkIFVzZXIuCgoKIVtlemdpZi5jb20tZ2lmLW1ha2VyLmdpZl0oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NjA4ODIxMTcyODAvcHZzcW9RSzdZLmdpZiBhbGlnbj0ibGVmdCIpCgpZb3Ugd2lsbCBub3cgdXNlIHRoYXQgbmV3bHkgY3JlYXRlZCB1c2VyLiBXZSdsbCB1c2UgdGhpcyBuZXdseSBjcmVhdGVkIHVzZXIgdG8gbWFrZSBhdXRoZW50aWNhdGVkIHJlcXVlc3RzIHRvIHRoZSBHcmFwaFFMIEFQSS4KCgoKClNpZ24gaW4gYW5kIHF1ZXJ5IGRhdGEKQWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0byBzaWduIGluIHRoZSBuZXcgdXNlciBhbmQgcmVxdWVzdCB0aGUgbGlzdCBvZiB0b2RvcyBhZ2FpbjoKYGBgCmltcG9ydCB7IE5ob3N0Q2xpZW50IH0gZnJvbSAnQG5ob3N0L25ob3N0LWpzJzsKCmNvbnN0IG5ob3N0ID0gbmV3IE5ob3N0Q2xpZW50KHsKICBiYWNrZW5kVXJsOiAnaHR0cHM6Ly9bYXBwLXN1YmRvbWFpbl0ubmhvc3QucnVuJywKfSkoYXN5bmMgKCkgPT4gewogIC8vIFNpZ24gaW4gdXNlcgogIGNvbnN0IHNpZ25JblJlc3BvbnNlID0gYXdhaXQgbmhvc3QuYXV0aC5zaWduSW4oewogICAgZW1haWw6ICdqb2VAZXhhbXBsZS5jb20nLAogICAgcGFzc3dvcmQ6ICdzZWN1cmVwYXNzd29yZCcsCiAgfSk7CgogIC8vIEhhbmRsZSBzaWduLWluIGVycm9yCiAgaWYgKHNpZ25JblJlc3BvbnNlLmVycm9yKSB7CiAgICB0aHJvdyBzaWduSW5SZXNwb25zZS5lcnJvcjsKICB9CgogIC8vIEdldCB0b2RvcwogIGNvbnN0IHRvZG9zID0gYXdhaXQgbmhvc3QuZ3JhcGhxbC5yZXF1ZXN0KGAKICAgIHF1ZXJ5IHsKICAgICAgdG9kb3MgewogICAgICAgIGlkCiAgICAgICAgY3JlYXRlZF9hdAogICAgICAgIG5hbWUKICAgICAgICBpc19jb21wbGV0ZWQKICAgICAgfQogICAgfQogIGApOwoKICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0b2Rvcy5kYXRhLCBudWxsLCAyKSk7Cn0pKCk7CgpgYGAKCi0gKipQZXJtaXNzaW9ucyBmb3Igc2lnbmVkLWluIHVzZXJzKioKTGV0IHVzIG9yZ2FuaXplIHRoZSBwZXJtaXNzaW9ucyBzbyBpdCB3b3JrcyBmb3Igc2lnbmVkIGluIHVzZXJzIHRvby4KCioqUmVtb3ZlIHBlcm1pc3Npb25zIGZvciB0aGUgcHVibGljIHJvbGUqKgpXZSB3b24ndCB1c2UgdGhlIHB1YmxpYyByb2xlIGFueW1vcmUsIHNvIGxldCdzIHJlbW92ZSBhbGwgcGVybWlzc2lvbiBmb3IgdGhhdCByb2xlLgoKIVtyZW1vdmUtcHVibGljLXBlcm1pc3Npb25zLnBuZ10oaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE2NjA4ODIyNTQ1NzIvTkx1LUZWSkZYLnBuZyBhbGlnbj0ibGVmdCIpCgoKCi0gKipJbnNlcnQgcGVybWlzc2lvbioqCkZpcnN0LCB3ZSdsbCBzZXQgdGhlIEluc2VydCBwZXJtaXNzaW9uLgoKCiFbdXNlci1pbnNlcnQtcGVybWlzc2lvbi5wbmddKGh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNjYwODgyMzMwNTUyL0ZUS0cwcURVOS5wbmcgYWxpZ249ImxlZnQiKQoKCi0gKipTZWxlY3QgcGVybWlzc2lvbioqCkZvciBTZWxlY3QgcGVybWlzc2lvbiwgc2V0IGEgY3VzdG9tIGNoZWNrIHNvIHVzZXJzIGNhbiBvbmx5IHNlbGVjdCB0b2RvcyB3aGVyZSB1c2VyX2lkIGlzIHRoZSBzYW1lIGFzIHRoZWlyIHVzZXIgaWQuIEluIG90aGVyIHdvcmRzOiB1c2VycyBhcmUgb25seSBhbGxvd2VkIHRvIHNlbGVjdCB0aGVpciB0b2Rvcy4gU2VlIHRoZSBpbWFnZSBiZWxvdy4KCgohW3VzZXItc2VsZWN0LXBlcm1pc3Npb24ucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDg4MjM3NDg3Ny9SWFZjYmh2Wm4ucG5nIGFsaWduPSJsZWZ0IikKCk5vdyByZXJ1biB0aGUgYXBwLiBOZXcgdG9kb3MgYXJlIGluc2VydGVkLCBhbmQgb25seSB0b2RvcyBmb3IgdGhlIHVzZXIgYXJlIGZldGNoZWQgYW5kIGRpc3BsYXllZC4gWW91ciBiYWNrZW5kIGlzIHN1Y2Nlc3NmdWxseSBzZWN1cmVkIQoKCgojIyA2LiBBcmNoaXRlY3R1cmUgb2YgTmhvc3QKCgohW25ob3N0LWRpYWdyYW0ucG5nXShodHRwczovL2Nkbi5oYXNobm9kZS5jb20vcmVzL2hhc2hub2RlL2ltYWdlL3VwbG9hZC92MTY2MDc5MjYzMDk2MS96Tk1MSlJVcmQucG5nIGFsaWduPSJsZWZ0IikKCiMjIDcuIENvbm5lY3Qgd2l0aCBOaG9zdCDwn5SXCgotIFtUd2l0dGVyXShodHRwczovL3R3aXR0ZXIuY29tL25ob3N0aW8pCgotIFtHaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9uaG9zdC9uaG9zdCkKCi0gW1lvdXR1YmVdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUNKN2lydHZWOVkwRVFNeHBhYmI2bnRnP3ZpZXdfYXM9c3Vic2NyaWJlcikKCi0gW0Rpc2NvcmQgY29tbXVuaXR5XShodHRwczovL2Rpc2NvcmQuY29tL2ludml0ZS85VjdRYjJVKQoKCiMjIDguIFJlc291cmNlcyDwn5qpCgoKaHR0cHM6Ly9ibG9nLmt1YmV3b3JsZC5vcmcvbmhvc3QtY2FzZS1zdHVkeQoKPWh0dHBzOi8vZ2l0aHViLmNvbS9uaG9zdC9uaG9zdAoKaHR0cHM6Ly95b3V0dS5iZS9SV1ZjTUVnRVRTMAoKaHR0cHM6Ly9uaG9zdC5pby9ibG9nL25ob3N0LXVuZGVyc3RhbmRpbmctdGhlLWJhc2ljcwoKaHR0cHM6Ly9uaG9zdC5pby9ibG9nL25ob3N0LXVuZGVyc3RhbmRpbmctdGhlLWJhc2ljcwoKaHR0cHM6Ly95b3V0dS5iZS9lZDhTekFMcHgxUQoKaHR0cHM6Ly9naXRodWIuY29tL2ZpcmViYXNlLwoKaHR0cHM6Ly9naXRodWIuY29tL3Bvc3RncmVzL3Bvc3RncmVzCgpodHRwczovL2dpdGh1Yi5jb20vaGFzdXJhL2dyYXBocWwtZW5naW5lCgoKClRoYW5rcyBmb3IgcmVhZGluZy4gSSBob3BlIHlvdSB3aWxsIHRyeSBpdCBvdXQgYW5kIGxlYXJuIHNvbWV0aGluZyBuZXcuIEFsc28gaW5jYXNlIGkgaGF2ZSBtaXNzZWQgc29tZXRoaW5nIGZlZWwgZnJlZSB0byBzaGFyZSB5b3VyIHRob3VnaHRzIGFuZCBmZWVkYmFjay4gCgpUbyByZWFjaCBvdXQgdG8gbWUg8J+RgAoKW1R3aXR0ZXJdKGh0dHBzOi8vdHdpdHRlci5jb20vQURJVFlBOTA1NDYxNzApIPCflrEKCltMaW5rZWRJbl0oaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2FkaXR5YS1kYXMtN2IyMjc2MjAyKSDwn5axCgpbR2l0aHViXShodHRwczovL2dpdGh1Yi5jb20vQURJVFlBREFTMTk5OSkg8J+WsQoKCg==