IyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQojICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQojICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAojICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgojICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKIyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIyAgdW5kZXIgdGhlIExpY2Vuc2UuCgojCiMgIFRoaXMgaXMgdGhlIG1haW4gaTE4biByZXNvdXJjZSBmaWxlIGZvciBKU1BXaWtpIGludGVybmFsCiMgIGNvZGUsIHRoZSBzby1jYWxsZWQgY29yZSBjb2RlLgojCiMgUGxlYXNlLCBkbyBub3QgZm9yZ2V0IHRvIHVzZSBwcm9wZXIgSFRNTCBlbnRpdGllcywgc28KIyAgICIgPSAmcXVvdDsKIyAgICcgPSAmIzM5OyAgTm90ZSB0aGF0ICZhcG9zOyBpcyBOT1QgSFRNTCwgYW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHdvcmsgaW4gYWxsIGJyb3dzZXJzLgoKIwojICBUaW1lL2RhdGUgZm9ybWF0dGluZy4gIFNvbWUgcGx1Z2lucyBtaWdodCBiZSB1c2luZyBzb21lIHNwZWNpZmljIGZvcm1hdHMsCiMgIGJ1dCB5b3UgYXJlIGZyZWUgdG8gdXNlIHRoZXNlIHRpbWVzIGFuZCBkYXRlcy4KIwoKIyBUaW1lZGF0ZSBmb3JtYXQgdXNlZCB3aGVuIGEgZnVsbCB0aW1lL2RhdGUgaXMgdXNlZApjb21tb24uZGF0ZXRpbWVmb3JtYXQgPSBISDptbTpzcyBkZC1NTU0teXl5eSB6enoKCiMgVGltZSBzdGFtcCBmb3JtYXQgd2hlbiBhIHNpbXBsZSB0aW1lIHN0YW1wIGlzIG5lZWRlZCAod2l0aG91dCBkYXRlKQpjb21tb24udGltZWZvcm1hdCA9IEhIOm1tOnNzCgojIERhdGUgc3RhbXAgZm9ybWF0IHdoZW4gc2hvd2luZyBqdXN0IHRoZSBkYXRlLgpjb21tb24uZGF0ZWZvcm1hdCA9IEVFRUUsIGQgTU1NTSwgeXl5eQoKIyAiVW5rbm93biBhdXRob3IiCmNvbW1vbi51bmtub3duYXV0aG9yID0gT25iZWtlbmRlQXV0ZXVyCgojIERlY2lzaW9uczogezB9PXRhc2sgb3duZXI7IHsxfT1yZXF1ZXN0ZXI7IHsyLTl9PWFkZGl0aW9uYWwgbWVzc2FnZSBhcmd1bWVudHMgZm9yIHdvcmtmbG93CmRlY2lzaW9uLmVkaXRXaWtpQXBwcm92YWw9QmV3ZXJrIHBhZ2luYSB7Mn0KCiMgU2VjdXJpdHkKCnNlY3VyaXR5LmVycm9yLm5vYWNjZXNzLmxvZ2dlZD1VIGhlZWZ0IGdlZW4gdG9lZ2FuZyBuYWFyICYjMzk7ezB9JiMzOTsuIFdpbHQgVSBhYW5sb2dnZW4gYWxzIGVlbiBhbmRlcmUgdXNlcj8Kc2VjdXJpdHkuZXJyb3Iubm9hY2Nlc3M9VSBoZWVmdCBnZWVuIHRvZWdhbmcgbmFhciAmIzM5O3swfSYjMzk7LiBHZWxpZXZlIGVlcnN0IGluIHRlIGxvZ2dlbi4Kc2VjdXJpdHkuZXJyb3Iud3JvbmdpcD1Gb3V0OiBJUCBhZHJlcyBpcyBvbmdlbGRpZwojQXR0ZW1wdCB0byBwb3N0IGZyb20gYSBkaWZmZXJlbnQgSVAgYWRkcmVzcyB0aGFuIHdoZXJlIHRoZSBwYWdlIHdhcyBvcmlnaW5hbGx5IGZldGNoZWQuCgpzZWN1cml0eS5lcnJvci5jcmVhdGVwcm9maWxlYmVmb3JlbG9naW49VSBkaWVudCBlZXJzdCBpbiB0ZSBsb2dnZW4gYWx2b3JlbnMgZWVuIGdlYnJ1aWtlcnNwcm9maWVsIGFhbiB0ZSBtYWtlbgpzZWN1cml0eS5lcnJvci5ibGFua3Bhc3N3b3JkPVdhY2h0d29vcmQgdmVsZCBpcyBsZWVnCnNlY3VyaXR5LmVycm9yLnBhc3N3b3Jkbm9tYXRjaD1XYWNodHdvb3JkIGlzIG9uanVpc3QuCgpzZWN1cml0eS5lcnJvci5pbGxlZ2FsZnVsbG5hbWU9T25nZWxkaWdlIHZvbGxlZGlnZSBuYWFtICJ7MH0iCnNlY3VyaXR5LmVycm9yLmlsbGVnYWxsb2dpbm5hbWU9T25nZWxkaWdlIExvZ2luIG5hYW0gInswfSI7CgpzZWN1cml0eS5lcnJvci5jYW5ub3QucmVuYW1lPUthbiBuaWV0IGhlcm5vZW1lbjogZGUgTG9naW4gbmFhbSAnJ3swfScnIGlzIGFsIGluIGdlYnJ1aWsuCnNlY3VyaXR5LmVycm9yLmZ1bGxuYW1lLnRha2VuPURlIHZvbGxlZGlnZSBuYWFtICcnezB9JycgaXMgYWwgaW4gZ2VicnVpay4Kc2VjdXJpdHkuZXJyb3IubG9naW4udGFrZW49RGUgTG9naW4gbmFhbSAnJ3swfScnIGlzIGFsIGluIGdlYnJ1aWsuIAoKIyBUaGVzZSBzaG91bGQgcm91Z2hseSBtYXRjaCB3aGF0ZXZlciBpcyB1c2VkIGluIGRlZmF1bHQucHJvcGVydGllcyBmb3IgVXNlclByb2ZpbGUuanNwCnNlY3VyaXR5LnVzZXIubG9naW5uYW1lPUxvZ2luIG5hYW0Kc2VjdXJpdHkudXNlci5mdWxsbmFtZT1Wb2xsZWRpZ2UgbmFhbQpzZWN1cml0eS51c2VyLmVtYWlsPUVtYWlsIGFkcmVzCnNlY3VyaXR5LnVzZXIuZnVsbG5hbWUuaW52YWxpZD1PbmdlbGRpZ2UgR2VicnVpa2VycyBOYWFtCgojIFJlbmFtaW5nCgpyZW5hbWUuZW1wdHk9RGUgbmlldXdlIG5hYW0gdmFuIGRlIHBhZ2luYSBpcyBsZWVnLgpyZW5hbWUuZXJyb3IudGl0bGU9Rm91dDogZGUgcGFnaW5hIGtvbiBuaWV0IHdvcmRlbiBoZXJub2VtZApyZW5hbWUuZXJyb3IucmVhc29uPVJlZGVuOgpyZW5hbWUuaWRlbnRpY2FsPURlIHBhZ2luYSBuYW1lbiB6aWpuIGlkZW50aWVrLgpyZW5hbWUuZXhpc3RzPURlIHBhZ2luYSAiezB9IiBiZXN0YWF0IHJlZWRzLiBLaWVzIGVlbiBhbmRlcmUgbmFhbSBvZiB2ZXJ3aWpkZXIgZGUgcGFnaW5hICJ7MH0iLgpyZW5hbWUudW5rbm93bmVycm9yPUVyIGlzIGVlbiBvbmJla2VuZGUgZm91dCBvcGdldHJlZGVuICh7MH0pCgojIExvZ2luLmpzcCAgCmxvZ2luLmVycm9yLnBhc3N3b3JkPUdlZW4gZ2VsZGlnZSBsb2dpbi4KbG9naW4uZXJyb3Iubm9hY2Nlc3M9VSBoZWVmdCBnZWVuIHRvZWdhbmcgdG90IGRlemUgaW5mb3JtYXRpZS5Tb3JyeS4KCiMgTG9zdHBhc3N3b3JkLmpzcAogIAojIDAgPSBsb2dpbiBuYW1lLCAxID0gcGFzc3dvcmQsIDIgPSBVUkwsIDMgPSBBcHBsaWNhdGlvbiBuYW1lIChhcyBzaWduYXR1cmUpCiMgVGhpcyBpcyB0ZXh0LCBub3QgSFRNTC4KbG9zdHB3ZC5uZXdwYXNzd29yZC5lbWFpbD1ab2FscyBhYW5nZXZyYWFnZCwgdXcgbmlldXdlIHdhY2h0d29vcmQgdm9vciBkZSBsb2dpbiAiezB9IiBpcyAiezF9IiBcCiAgICAgICAgICAgICAgICAgICAgXG5cblUga2FuIGlubG9nZ2VuIG9wIHsyfS5cblxuLS0gezN9Cmxvc3Rwd2QubmV3cGFzc3dvcmQuc3ViamVjdD1OaWV1dyB3YWNodHdvb3JkIHZvb3IgezB9Cmxvc3Rwd2Qubm91c2VyPUZvdXQ6IGVyIGlzIGdlZW4gZ2VicnVpa2VyIG9mIGVtYWlsICYjMzk7ezB9JiMzOTsgZ2V2b25kZW4uCmxvc3Rwd2Qubm9tYWlsPUludGVybmUgZm91dDogZGUgZW1haWwga29uIG5pZXQgd29yZGVuIHZlcnpvbmRlbi4gR2VsaWV2ZSBkZSBzaXRlIGFkbWluaXN0cmF0b3IgdGUgY29udGFjdGVyZW4uCmxvc3Rwd2QuZW1haWxlZD1FZW4gbmlldXcgd2FjaHR3b29yZCBpcyBnZS1lbWFpbGVkIG5hYXIgZGUgZ2VicnVpa2VyCgpsb3N0cHdkLnJlc2V0LnRpdGxlPUhlc3RlbCB3YWNodHdvb3JkCmxvc3Rwd2QucmVzZXQudW5hYmxlPUVyIHdhcyBlZW4gcHJvYmxlZW0gbWV0IGRlemUgYWN0aWUuIFByb2JlZXIgb3BuaWV1dy4KCmxvc3Rwd2QucmVzZXQuYmx1cmI9VSBiZW50IGhldCB3YWNodHdvb3JkIHZlcmdldGVuIG9mIHZlcmxvcmVuPyAgVnVsIGhpZXIgaGV0IGVtYWlsIGFkcmVzIGRhdCBVIGJpaiByZWdyaXN0cmF0aWUgaGVidCBpbmdldnVsZC4KbG9zdHB3ZC5yZXNldC5zdWJtaXQ9SGVyc3RlbCB3YWNodHdvb3JkIQoKIyBUcmFkaXRpb25hbERpZmZQcm92aWRlcgoKZGlmZi50cmFkaXRpb25hbC5hZGRlZD1PcCBsaWpuIHswfSB3ZXJkZW4gezF9IHRvZWdldm9lZ2QKZGlmZi50cmFkaXRpb25hbC5jaGFuZ2VkPU9wIGxpam4gezB9IHdlcmRlbiB7MX0gZ2V3aWp6aWdkCmRpZmYudHJhZGl0aW9uYWwucmVtb3ZlZD1PcCBsaWpuIHswfSB3ZXJkZW4gezF9IHZlcndpamRlcmQKZGlmZi50cmFkaXRpb25hbC5vbmVsaW5lPenpbiBsaWpuCmRpZmYudHJhZGl0aW9uYWwubGluZXM9ezJ9IGxpam5lbgoKIyBJbnB1dFZhbGlkYXRvcgoKdmFsaWRhdGUudW5zYWZlY2hhcnM9ezB9IG1hZyBkZXplIHRla2VucyBuaWV0IGJldmF0dGVuIHsxfQp2YWxpZGF0ZS5pbnZhbGlkZW1haWw9ezB9IGlzIG9uZ2VsZGlnCnZhbGlkYXRlLmNhbnRiZW51bGw9ezB9IG1hZyBuaWV0IGxlZWcgemlqbgoKIyBVc2VyUHJvZmlsZVRhZwoKdXNlcnByb2ZpbGUubm9ncm91cHM9KGdlZW4pCnVzZXJwcm9maWxlLm5vcm9sZXM9KGdlZW4pCgojIE5ld0dyb3VwLmpzcApuZXdncm91cC5leGlzdHM9R3JvZXAgezB9IGJlc3RhYXQgcmVlZHMuIFByb2JlZXIgZWVuIGFuZGVyZSBuYWFtLgoKIyBKU1BXaWtpTWFya3VwUGFyc2VyIAoKbWFya3VwcGFyc2VyLmVycm9yLmludmFsaWRzZXQgPSBGb3V0aWVmIFNFVCBjb21tYW5kbyBnZXZvbmRlbjogezB9Cm1hcmt1cHBhcnNlci5lcnJvci5ub2ludGVyd2lraXJlZiA9IEVyIGlzIGdlZW4gSW50ZXJXaWtpIGRlZmluaXRpZSBpbiBqc3B3aWtpLnByb3BlcnRpZXMgdm9vciAiezB9IiEKbWFya3VwcGFyc2VyLmVycm9yLnBhcnNlcmZhaWx1cmUgPSBGb3V0IGluIGRlIFBhcnNlcjogezB9Cm1hcmt1cHBhcnNlci5lcnJvci5qYXZhc2NyaXB0YXR0ZW1wdCA9IEZvdXQgaW4gamF2YXNjcmlwdCBnZW5lcmF0aWUhIAptYXJrdXBwYXJzZXIubGluay5jcmVhdGUgPSBDcmVhdGUgInswfSIKCiMgQ2FwdGNoYS5qc3AKY2FwdGNoYS5qcy5odW1hbmNoZWNrY29tcGxldGUuYWxlcnQ9S2llcyBkZSBrYXR0ZW4uCmNhcHRjaGEuZGVzY3JpcHRpb249V2UgZGVua2VuIGRhdCBqZSBlZW4gcm9ib3Qgb2YgZWVuIHNwYW1tZXIgYmVudC4gIEt1biBqZSBoaWVyb25kZXIgZGUga2F0dGVuIHNlbGVjdGVyZW5cCiAgICAgICAgICAgICAgICAgICAgLCB6b2RhdCB3ZSB6ZWtlciB3ZXRlbiBkYXQgamUgZWVuIG1lbnMgYmVudCA/CmNhcHRjaGEuYXNpcnJhLnBsZWFzZS5zZWxlY3Q9U2VsZWN0ZWVyIGFsbGUga2F0IGZvdG8nczoKY2FwdGNoYS5hc2lycmEuYWRvcHQubWU9QWRvcHRlZXIgbWUKY2FwdGNoYS5hc2lycmEuYS5nZXQuY2hhbGxlbmdlPVZyYWFnIGFuZGVyZSBwbGFhdGplcwpjYXB0Y2hhLmFzaXJyYS5hLndoYXRzdGhpcz1XYXQgaXMgZGl0ID8KY2FwdGNoYS5zdWJtaXQ9U3VibWl0CgojIEluc3RhbGwuanNwCmluc3RhbGwuanNwLnRpdGxlPUpTUFdpa2kgSW5zdGFsbGVyCmluc3RhbGwuanNwLmludHJvLnRpdGxlPUpTUFdpa2kgSW5zdGFsbGVyCmluc3RhbGwuanNwLmludHJvLnAxPVdlbGtvbSEgIERlemUga2xlaW5lIEpTUCBoZWxwdCBqZSBkb29yIGRlIGVlcnN0ZSBtb2VpbGlqa2UgZmFzZSB2YW4gSlNQV2lraSBcCiAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGllLiAgQWxzIGplIGRlemUgcGFnaW5hIHppZXQsIGRhbiBoZWIgamUgSlNQV2lraSBhbCBjb3JyZWN0IGdlaW5zdGFsbGVlcmQgXAogICAgICAgICAgICAgICAgICAgICBpbiBqZSAod2ViKWNvbnRhaW5lci4KaW5zdGFsbC5qc3AuaW50cm8ucDI9RXIgemlqbiBlZW4gYWFudGFsIGRpbmdlbiBkaWUgamUgbW9ldCBjb25maWd1cmVyZW4uICBBbHMgamUgQ29uZmlndXJlZXIga2xpa3QgLCB6YWwgZGUgc3RhbmRhYXJkIFwKICAgICAgICAgICAgICAgICAgICAgPGNvZGU+anNwd2lraS5wcm9wZXJ0aWVzPC9jb2RlPiBmaWxlIHdvcmRlbiBnZXdpanppZ2QsIG9mIGFscyBpZSBcCiAgICAgICAgICAgICAgICAgICAgIG5pZXQgZ2V2b25kZW4ga2FuIHdvcmRlbiwgemFsIGVyIGVlbiBoYWdlbG5pZXV3ZSB3b3JkZW4gZ2VtYWFrdC4KaW5zdGFsbC5qc3AuaW50cm8ucDM9RGl0IHNldHVwIHN5c3RlZW0gaXMgZWNodCBiZWRvZWxkIHZvb3IgbWVuc2VuIGRpZSBtZXRlZW4gYWFuIGRlIHNsYWcgd2lsbGVuLiBcCiAgICAgICAgICAgICAgICAgICAgIEFscyBqZSBKU1BXaWtpIHdpbHQgaW50ZWdyZXJlbiBpbiBlZW4gYmVzdGFhbmRlIG9tZ2V2aW5nLCBkYW4gcmFhZCBpayB0b2NoIGFhbiBvbSBkZSBmaWxlIFwKICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmpzcHdpa2kucHJvcGVydGllczwvY29kZT4gemVsZiBtZXQgaGV0IGhhbmRqZSB0ZSB3aWp6aWdlbi4gIEplIHZpbmR0IGVlbiB2b29yYmVlbGQgaW4gXAogICAgICAgICAgICAgICAgICAgICA8Y29kZT55b3Vyd2lraS9XRUItSU5GLzwvY29kZT4uCmluc3RhbGwuanNwLmluc3RhbGwuaW5mbz1Hb2VkIG5pZXV3czogCmluc3RhbGwuanNwLmluc3RhbGwud2FybmluZz1XYWFyc2NodXdpbmc6IAppbnN0YWxsLmpzcC5pbnN0YWxsLmVycm9yPUtvbiBkZSBjb25maWd1cmF0aWUgbmlldCBvcHNsYWFuOiAKaW5zdGFsbC5qc3AuaW5zdGFsbC5tc2cucm5kLnB3ZD1PbWRhdCBlciBub2cgZ2VlbiBhZG1pbmlzdHJhdG9yIGFjY291bnQgYmVzdGFhdCwgaGVlZnQgSlNQV2lraSBlciBlZW4gdm9vciBqZSBnZW1hYWt0LCBtZXQgZWVuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gd2FjaHR3b29yZC4gSmUga2FuIGRpdCBuYXR1dXJsaWprIGxhdGVyIHplbGYgd2lqemlnZW4uIEhldCBhY2NvdW50IGlzIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MH0gZW4gaGV0ICB3YWNodHdvb3JkIGlzIHsxfS4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaHJpamYgZGl0IGV2ZW4gb3AgZWVuIGtsYWRqZSBlbiBiZXdhYXIgaGV0Li4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUFdpa2kgaGVlZnQgb29rIGVlbiBncm9lcCBhYW5nZW1hYWt0IG1ldCBkZSBuYWFtIHsyfSB3YWFyIGRlemUgdXNlciBsaWQgdmFuIGlzLgppbnN0YWxsLmpzcC5pbnN0YWxsLm1zZy5hZG1pbi5ub3RleGlzdHM9SXMgZGl0IGRlIGVlcnN0ZSBrZWVyIGRhdCBqZSBkZSBJbnN0YWxsZXIgZHJhYWl0ID8gWm9qYSwgZGFuIG1vZXQgamUgd2V0ZW4gZGF0IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hZGF0IEpTUFdpa2kgamUgY29uZmlndXJhdGllIHZvb3IgZGUgZWVyc3RlIGtlZXIgaGVlZnQgZ2V2YWxpZGVlcmQgZW4gb3BnZXNsYWdlbiwgamUgYWRtaW5pc3RyYXRpZXZlIHJlY2h0ZW4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kaWcgaGVidCBvbSBkZXplIHBhZ2luYSB0ZSBiZW5hZGVyZW4uIERpdCBkb2VuIHdlIG9tIHRlIHZvb3Jrb21lbiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXQgd2lsbGVrZXVyaWdlIG9udmVybGF0ZW4gaWV0cyBlbmdzIG1ldCBqZSB3aWtpIGRvZW4uICAgCgppbnN0YWxsLmpzcC5iYXNpY3MudGl0bGU9QmFzaWNzCmluc3RhbGwuanNwLmJhc2ljcy5hcHBuYW1lLmxhYmVsPUFwcGxpY2F0aWUgbmFhbQppbnN0YWxsLmpzcC5iYXNpY3MuYXBwbmFtZS5kZXNjPUhvZSBtb2V0IGplIHdpa2kgaGV0ZW4gPyAgUHJvYmVlciBkZXplIG5hYW0gemludm9sIGVuIGtvcnQgdGUgaG91ZGVuLi4KaW5zdGFsbC5qc3AuYmFzaWNzLmJhc2V1cmwubGFiZWw9QmFzZSBVUkwKaW5zdGFsbC5qc3AuYmFzaWNzLmJhc2V1cmwuZGVzYz1WZXJ0ZWwgSlNQV2lraSB3YWFyIGplIHdpa2kgemljaCBiZXZpbmR0LgppbnN0YWxsLmpzcC5iYXNpY3MucGFnZS5zdG9yYWdlLmxhYmVsPVBhZ2luYSBvcHNsYWcKaW5zdGFsbC5qc3AuYmFzaWNzLnBhZ2Uuc3RvcmFnZS5kZXNjPVN0YW5kYWFyZCBnZWJydWlrdCBKU1BXaWtpIGRlIFZlcnNpb25pbmdGaWxlUHJvdmlkZXIgZGllIGZpbGVzIG9wc2xhYXQgaW4gZWVuIGRpcmVjdG9yeSBvcCBzY2hpamYgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxzIGplIGVlbiBkaXJlY3Rvcnkgb3BnZWVmdCBkaWUgbmlldCBiZXN0YWF0LCB6YWwgSlNQV2lraSBlciBlZW4gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9vciBqZSBhYW5tYWtlbi4gQWxsZSBhdHRhY2htZW50cyB3b3JkZW4gb29rIGluIGRlemUgZGlyZWN0b3J5IG9wZ2VzbGFnZW4uCgppbnN0YWxsLmpzcC5zZWN1cml0eS50aXRsZT1TZWN1cml0eQppbnN0YWxsLmpzcC5zZWN1cml0eS5zZWMuY29uZi5sYWJlbD1TZWN1cml0eSBjb25maWd1cmF0aWUKaW5zdGFsbC5qc3Auc2VjdXJpdHkuc2VjLmNvbmYub3B0MT1KQUFTIGVuIGNvbnRhaW5lciBzZWN1cml0eSAoc3RhbmRhYXJkKQppbnN0YWxsLmpzcC5zZWN1cml0eS5zZWMuY29uZi5vcHQyPUFsbGVlbiBDb250YWluZXIgc2VjdXJpdHkKaW5zdGFsbC5qc3Auc2VjdXJpdHkuc2VjLmNvbmYuZGVzYz1TdGFuZGFhcmQgemFsIEpTUFdpa2kgZGUgdG9lZ2FuZyBiZWhlcmVuIHZpYSBlZW4gSkFBUy1iYXNlZCBzZWN1cml0eSBzeXN0ZWVtLiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGV0IGhvdWR0IG9vayByZWtlbmluZyBtZXQgY29udGFpbmVyIHNlY3VyaXR5IGJlcGVya2luZ2VuLCBtb2NodCBqZSBkaWUgaGViYmVuLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzIGplIHplIGIudi4gZW5hYmxlZCBoZWJ0IGluIGRlIDxjb2RlPndlYi54bWw8L2NvZGU+LiBBbHMgamUgIEpBQVMgc2VjdXJpdHkgdWl0emV0LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FuIGhldCB6aWpuIGRhdCBKU1BXaWtpIG5pZXQgaGVsZW1hYWwgd2Vya3Qgem9hbHMgdmVyd2FjaHQuIEplIGthbiBkaXQgYWYgZW4gdG9lIGRvZW4gb20gdGUgdHJvdWJsZXNob290ZW4uCmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQubGFiZWw9QWRtaW5pc3RyYXRvciBhY2NvdW50Cmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQuZW5hYmxlZD1FbmFibGVkCmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQubm90ZW5hYmxlZD1OaWV0IEVuYWJsZWQKaW5zdGFsbC5qc3Auc2VjdXJpdHkuYWRtYWNjb3VudC5lbmFibGVkLmRlc2M9RGV6ZSB3aWtpIGhlZWZ0IGVlbiBhZG1pbmlzdHJhdG9yIGFjY291bnQgZ2VuYWFtZCA8c3Ryb25nPmFkbWluPC9zdHJvbmc+IGRpZSBsaWQgaXMgdmFuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGUgd2lraSBncm9lcCA8c3Ryb25nPkFkbWluPC9zdHJvbmc+LiBTdGFuZGFhcmQgemFsIEpTUFdpa2kncyBzZWN1cml0eSBwb2xpY3kgYWxsZSBsZWRlbiB2YW4gZGUgQWRtaW4gZ3JvZXAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZSBrcmFjaHRpZ2UgPGNvZGU+QWxsUGVybWlzc2lvbjwvY29kZT4gdG9la2VubmVuLgppbnN0YWxsLmpzcC5zZWN1cml0eS5hZG1hY2NvdW50Lm5vdGVuYWJsZWQuZGVzYz1IZXQgbGlqa3QgZXIgb3AgZGF0IGRlemUgd2lraSBnZWVuIGFkbWluaXN0cmF0b3IgYWNjb3VudCBoZWVmdC4gQWxzIGplIDxlbT5Db25maWd1cmUhPC9lbT4sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbGlrdCwgemFsIEpTUFdpa2kgZXIgZWVuIHZvb3IgamUgbWFrZW4uCgppbnN0YWxsLmpzcC5hZHYuc2V0dGluZ3MudGl0bGU9QWR2YW5jZWQgU2V0dGluZ3MKaW5zdGFsbC5qc3AuYWR2LnNldHRpbmdzLmxvZ2ZpbGUubGFiZWw9TG9nIGZpbGVzCmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy5sb2dmaWxlLmRlc2M9SlNQV2lraSBnZWJydWlrdCBBcGFjaGUgTG9nNGogdm9vciBsb2dnaW5nLiAgVmVydGVsIEpTUFdpa2kgd2FhciBkZSBsb2cgZmlsZXMgdGVyZWNodCBtb2V0ZW4ga29tZW4uCmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy53b3JrZGlyLmxhYmVsPVdvcmsgZGlyZWN0b3J5Cmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy53b3JrZGlyLmRlc2M9RGl0IGlzIGRlIHBsZWsgd2FhciBhbGxlIGNhY2hlcyBlbiBhbmRlcmUgcnVudGltZSBzcHVsbGVuIHdvcmRlbiBvcGdlc2xhZ2VuLgppbnN0YWxsLmpzcC5pbnN0ci5kZXNjPUFscyBqZSBvcCA8ZW0+Q29uZmlndXJlITwvZW0+IGtsaWt0LCB6YWwgZGUgSW5zdGFsbGVyIGplIGluc3RlbGxpbmcgb3BzbGFhbiBpbiA8Y29kZT57MH08L2NvZGU+LiBcCiAgICAgICAgICAgICAgICAgICAgICAgSGlqIHphbCBvb2sgZWVuIEFkbWluaXN0cmF0b3IgYWNjb3VudCBtZXQgZWVuIHJhbmRvbSB3YWNodHdvb3JkIGVuIGVlbiBBZG1pbiBncm91cCBhYW5tYWtlbi4gCmluc3RhbGwuanNwLmluc3RyLnN1Ym1pdD1Db25maWd1cmVlciEKaW5zdGFsbC5qc3AudmFsaWRhdGVkLm5ldy5wcm9wcz1IaWVyIGlzIGplIGhhZ2VsbmlldXdlIGpzcHdpa2kucHJvcGVydGllcwoKIyBJbnN0YWxsZXIuamF2YQppbnN0YWxsLmluc3RhbGxlci51bmFibGUucmVhZC5wcm9wcz1LYW4gZGUgcHJvcGVydGllcyBuaWV0IGxlemVuOiB7MH0KaW5zdGFsbC5pbnN0YWxsZXIuZGVmYXVsdC5hcHBuYW1lPU1pam5XaWtpCmluc3RhbGwuaW5zdGFsbGVyLmRlZmF1bHQucGFnZWRpcj1Db25maWd1cmVlciBtaWohCmluc3RhbGwuaW5zdGFsbGVyLnByb3BzLnNhdmVkPUplIG5pZXV3ZSBwcm9wZXJ0aWVzIHppam4gb3BnZXNsYWdlbi4gIEhlcnN0YXJ0IGplIGNvbnRhaW5lciAoYmVoYWx2ZSB3YW5uZWVyIGRpdCBqZSBlZXJzdGUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpZSB3YXMpLiAgU2Nyb2xsIG5hYXIgYmVuZWRlbiBvbSBqZSBuaWV1d2UganNwd2lraS5wcm9wZXJ0aWVzIHRlIHppZW4uCmluc3RhbGwuaW5zdGFsbGVyLnByb3BzLm5vdHNhdmVkPUthbiBkZSBwcm9wZXJ0aWVzIG5pZXQgd2Vnc2NocmlqdmVuOiB7MH0uIFNsYSBvbmRlcnN0YWFuZGUgZmlsZSBvcCBhbHMganNwd2lraS5wcm9wZXJ0aWVzOlxuezF9Cmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLmJhc2V1cmw9SmUgbW9ldCBkZSBiYXNlIFVSTCB2b29yIGRlemUgd2lraSBkZWZpbmllcmVuLgppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS5wYWdlZGlyPUplIG1vZXQgZGUgcGxlayBjb25maWd1cmVyZW4gd2FhciBkZSBwYWdpbmEncyBtb2V0ZW4gd29yZGVuIG9wZ2VzbGFnZW4uCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLmFwcG5hbWU9SmUgbW9ldCBkZSBhcHBsaWNhdGllIG5hYW0gb3BnZXZlbgppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS53b3JrZGlyPUplIG1vZXQgZGUgd29yayBkaXJlY3Rvcnkgb3BnZXZlbi4KaW5zdGFsbC5pbnN0YWxsZXIudmFsaWRhdGUubG9nZGlyPUplIG1vZXQgZGUgbG9nIGRpcmVjdG9yeSBvcGdldmVuLgoKIyBSU1NJbWFnZUxpbmtUYWcKcnNzLnRpdGxlPVJTUyBmZWVkIHZvb3IgcGFnaW5hIHswfQoKCiMgQXR0YWNobWVudE1hbmFnZXIKYXR0YWNoLnVud2FudGVkLmZpbGU9T25nZXdlbnN0ZSBiZXN0YW5kc25hYW0KYXR0YWNoLmVtcHR5LmZpbGU9R2VlbiBiZXN0YW5kc25hYW0gb3BnZWdldmVuCmF0dGFjaC5wYXJlbnQubm90LmV4aXN0PURlIHBhcmVudCBwYWdpbmEgYmVzdGFhdCBuaWV0CgojIFZhcmlhYmxlTWFuYWdlcgp2YXJtZ3Iubm90LmxvZ2dlZC5pbj1uaWV0IGluZ2Vsb2dkCnZhcm1nci5hdXRoZW50aWNhdGVkPWdlYXV0aGVudGljZWVyZAp2YXJtZ3IuYXNzZXJ0ZWQ9YWFuZ2Vub21lbiBpZGVudGl0ZWl0CnZhcm1nci5hbm9ueW1vdXM9YW5vbmllbQo=