IyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQojICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KIw0KIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiMNCiMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCiMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQojICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCiMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KIyAgdW5kZXIgdGhlIExpY2Vuc2UuDQoNCiMNCiMgIFRoaXMgaXMgdGhlIG1haW4gaTE4biByZXNvdXJjZSBmaWxlIGZvciBKU1BXaWtpIGludGVybmFsDQojICBjb2RlLCB0aGUgc28tY2FsbGVkIGNvcmUgY29kZS4NCiMNCiMgUGxlYXNlLCBkbyBub3QgZm9yZ2V0IHRvIHVzZSBwcm9wZXIgSFRNTCBlbnRpdGllcywgc28NCiMgICAiID0gJnF1b3Q7DQojICAgJyA9ICYjMzk7ICBOb3RlIHRoYXQgJmFwb3M7IGlzIE5PVCBIVE1MLCBhbmQgZG9lcyBub3QgbmVjZXNzYXJpbHkgd29yayBpbiBhbGwgYnJvd3NlcnMuDQoNCg0KDQojDQojICBUaW1lL2RhdGUgZm9ybWF0dGluZy4gIFNvbWUgcGx1Z2lucyBtaWdodCBiZSB1c2luZyBzb21lIHNwZWNpZmljIGZvcm1hdHMsDQojICBidXQgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGVzZSB0aW1lcyBhbmQgZGF0ZXMuDQojDQoNCiMgVGltZWRhdGUgZm9ybWF0IHVzZWQgd2hlbiBhIGZ1bGwgdGltZS9kYXRlIGlzIHVzZWQNCmNvbW1vbi5kYXRldGltZWZvcm1hdCA9IEhIOm1tOnNzIGRkLU1NTS15eXl5IHp6eg0KDQojIFRpbWUgc3RhbXAgZm9ybWF0IHdoZW4gYSBzaW1wbGUgdGltZSBzdGFtcCBpcyBuZWVkZWQgKHdpdGhvdXQgZGF0ZSkNCmNvbW1vbi50aW1lZm9ybWF0ID0gSEg6bW06c3MNCg0KIyBEYXRlIHN0YW1wIGZvcm1hdCB3aGVuIHNob3dpbmcganVzdCB0aGUgZGF0ZS4NCmNvbW1vbi5kYXRlZm9ybWF0ID0gRUVFRSwgZCBNTU1NLCB5eXl5DQoNCiMgIlVua25vd24gYXV0aG9yIg0KDQpjb21tb24udW5rbm93bmF1dGhvciA9IEF1dG9yRGVzY29uaGVjaWRvDQoNCiMgRGVjaXNpb25zOiB7MH09dGFzayBvd25lcjsgezF9PXJlcXVlc3RlcjsgezItOX09YWRkaXRpb25hbCBtZXNzYWdlIGFyZ3VtZW50cyBmb3Igd29ya2Zsb3cNCmRlY2lzaW9uLmVkaXRXaWtpQXBwcm92YWw9RWRpdGFyIHDhZ2luYSB7Mn0NCg0KIyBTZWN1cml0eQ0KDQpzZWN1cml0eS5lcnJvci5ub2FjY2Vzcy5sb2dnZWQ9Vm9j6iBu428gdGVtIGFjZXNzbyDgICYjMzk7ezB9JiMzOTsuIFZvY+ogZGVzZWphIGVudHJhciBjb21vIG91dHJvIHVzdeFyaW8/Lg0Kc2VjdXJpdHkuZXJyb3Iubm9hY2Nlc3M9Vm9j6iBu428gdGVtIGFjZXNzbyDgICYjMzk7ezB9JiMzOTsuIFBvciBmYXZvciBzZSBhdXRlbnRpcXVlIHByaW1laXJvLg0Kc2VjdXJpdHkuZXJyb3Iud3JvbmdpcD1UZW50YXRpdmEgZGUgcHVibGljYXIgdmluZGEgZGUgdW0gZW5kZXJl528gSVAgZGlmZXJlbnRlIGFvIGRvIHF1YWwgYSBw4WdpbmEgZm9pIG9yaWdpbmFsZW50ZSBidXNjYWRhLg0KDQpzZWN1cml0eS5lcnJvci5jcmVhdGVwcm9maWxlYmVmb3JlbG9naW49Vm9j6iBkZXZlIHNlIGF1dGVudGljYXIgYW50ZXMgZGUgY3JpYXIgdW0gcGVyZmlsLg0Kc2VjdXJpdHkuZXJyb3IuYmxhbmtwYXNzd29yZD1BIHNlbmhhIG7jbyBwb2RlIHNlciB2YXppYQ0Kc2VjdXJpdHkuZXJyb3IucGFzc3dvcmRub21hdGNoPUFzIHNlbmhhcyBu428gc+NvIGlk6m50aWNhcw0KDQpzZWN1cml0eS5lcnJvci5pbGxlZ2FsZnVsbG5hbWU9Tm9tZSBjb21wbGV0byAmcXVvdDt7MH0mcXVvdDsgaW524WxpZG8NCnNlY3VyaXR5LmVycm9yLmlsbGVnYWxsb2dpbm5hbWU9TG9naW4gJnF1b3Q7ezB9JnF1b3Q7IGluduFsaWRvDQoNCiMgVGhlc2Ugc2hvdWxkIHJvdWdobHkgbWF0Y2ggd2hhdGV2ZXIgaXMgdXNlZCBpbiBkZWZhdWx0LnByb3BlcnRpZXMgZm9yIFVzZXJQcm9maWxlLmpzcA0Kc2VjdXJpdHkudXNlci5sb2dpbm5hbWU9TG9naW4NCnNlY3VyaXR5LnVzZXIuZnVsbG5hbWU9Tm9tZSBjb21wbGV0bw0Kc2VjdXJpdHkudXNlci5lbWFpbD1FbmRlcmXnbyBkZSBlbWFpbA0Kc2VjdXJpdHkudXNlci5mdWxsbmFtZS5pbnZhbGlkPU5vbWUgaW524WxpZG8NCg0KIyBSZW5hbWluZw0KDQpyZW5hbWUuZW1wdHk9Tm9tZSBkZSBub3ZhIHDhZ2luYSB2YXppby4gDQpyZW5hbWUuZXJyb3IudGl0bGU9TuNvIGZvaSBwb3Nz7XZlbCByZW5vbWVhciBhIHDhZ2luYQ0KcmVuYW1lLmVycm9yLnJlYXNvbj1SYXrjbzoNCnJlbmFtZS5pZGVudGljYWw9Tm9tZXMgZGUgcOFnaW5hIGlk6m50aWNvcy4gDQpyZW5hbWUuZXhpc3RzPVDhZ2luYSAiezB9IiBleGlzdGVudGUuIFBvciBmYXZvciBhbHRlcmUgbyBub3ZvIG5vbWUgb3UgcmVtb3ZhIGEgcOFnaW5hICJ7MH0iIHByaW1laXJvLg0KcmVuYW1lLnVua25vd25lcnJvcj1BbiB1bmtub3duIGVycm9yIG9jY3VycmVkICh7MH0pDQoNCiMgTG9naW4uanNwICANCiNsb2dpbi5lcnJvci5jYXBzbG9jaz1JbnZhbGlkIGxvZ2luIChwbGVhc2UgY2hlY2sgeW91ciBDYXBzIExvY2sga2V5KSAjb2Jzb2xldGUNCmxvZ2luLmVycm9yLnBhc3N3b3JkPUxvZ2luIGluduFsaWRvLg0KbG9naW4uZXJyb3Iubm9hY2Nlc3M9Vm9j6iBu428gcG9zc3VpIGFjZXNzbyDgIGlzdG8uIE1lIGRlc2N1bHBlLg0KDQojIExvc3RwYXNzd29yZC5qc3ANCg0KIyAwID0gbG9naW4gbmFtZSwgMSA9IHBhc3N3b3JkLCAyID0gVVJMLCAzID0gQXBwbGljYXRpb24gbmFtZSAoYXMgc2lnbmF0dXJlKQ0KIyBUaGlzIGlzIHRleHQsIG5vdCBIVE1MLg0KbG9zdHB3ZC5uZXdwYXNzd29yZC5lbWFpbD1Db21vIHBlZGlkbywgc3VhIG5vdmEgc2VuaGEgcGFyYSBsb2dpbiAiezB9IiDpICJ7MX0iIFwNCiAgICAgICAgICAgICAgICAgICAgXG5cblZvY+ogcG9kZSBzZSBhdXRlbnRpY2FyIGVtIHsyfS5cblxuLS0gezN9DQpsb3N0cHdkLm5ld3Bhc3N3b3JkLnN1YmplY3Q9Tm92YSBzZW5oYSBwYXJhIHswfQ0KbG9zdHB3ZC5ub3VzZXI9TmVuaHVtIHVzdeFyaW8gb3UgZW1haWwgInswfSIgZm9pIGVuY29udHJhZG8uDQpsb3N0cHdkLm5vbWFpbD1FcnJvIGludGVybm86IG8gZW1haWwgbuNvIHBvZGUgc2VyIGVudmlhZG8hICBQb3IgZmF2b3IgZW50cmUgZW0gY29udGF0byBjb20gbyBhZG1uaXN0cmFkb3IuDQpsb3N0cHdkLmVtYWlsZWQ9VW1hIG5vdmEgc2VuaGEgZm9pIGVudmlhZGEgcG9yIGVtYWlsIHBhcmEgYSBjb250YSByZXF1aXNpdGFudGUuDQoNCmxvc3Rwd2QucmVzZXQudGl0bGU9UmVzZXRhciBzZW5oYQ0KbG9zdHB3ZC5yZXNldC51bmFibGU9TuNvIGZvaSBwb3Nz7XZlbCByZXNldGFyIGEgc2VuaGEuICBQb3IgZmF2b3IgdGVudGUgbm92YW1lbnRlLg0KDQpsb3N0cHdkLnJlc2V0LmJsdXJiPVBlcmRldSBvdSBlc3F1ZWNldSBhIHN1YSBzZW5oYT8gIEluc2lyYSBvIG5vbWUgZGEgc3VhIGNvbnRhIG91IHNldSBlbWFpbCBhcXVpOg0KbG9zdHB3ZC5yZXNldC5zdWJtaXQ9UmVzZXRhciBzZW5oYSENCg0KIyBUcmFkaXRpb25hbERpZmZQcm92aWRlcg0KDQpkaWZmLnRyYWRpdGlvbmFsLmFkZGVkPU5hIGxpbmhhIHswfSBhZGljaW9uYWRvIHsxfQ0KZGlmZi50cmFkaXRpb25hbC5jaGFuZ2VkPU5hIGxpbmhhIHswfSBhbHRlcmFkbyB7MX0NCmRpZmYudHJhZGl0aW9uYWwucmVtb3ZlZD1OYSBsaW5oYSB7MH0gcmVtb3ZpZG8gezF9DQpkaWZmLnRyYWRpdGlvbmFsLm9uZWxpbmU9b3VtYSBsaW5oYQ0KZGlmZi50cmFkaXRpb25hbC5saW5lcz17Mn0gbGluaGFzDQoNCiMgSW5wdXRWYWxpZGF0b3INCg0KdmFsaWRhdGUudW5zYWZlY2hhcnM9ezB9IG7jbyBwb2RlIGNvbnRlciBlc3RlcyBjYXJhY3RlcmVzOiB7MX0NCnZhbGlkYXRlLmludmFsaWRlbWFpbD17MH0gbuNvIOkgduFsaWRvDQp2YWxpZGF0ZS5jYW50YmVudWxsPXswfSBu428gcG9kZSBzZXIgdmF6aW8NCg0KIyBVc2VyUHJvZmlsZVRhZw0KDQp1c2VycHJvZmlsZS5ub2dyb3Vwcz0obmVuaHVtKQ0KdXNlcnByb2ZpbGUubm9yb2xlcz0obmVuaHVtKQ0KDQojIE5ld0dyb3VwLmpzcA0KbmV3Z3JvdXAuZXhpc3RzPUdydXBvIHswfSBleGlzdGVudGUuIFRlbnRlIG91dHJvIG5vbWUuDQoNCiMgSlNQV2lraU1hcmt1cFBhcnNlciANCg0KbWFya3VwcGFyc2VyLmVycm9yLmludmFsaWRzZXQgPSBFbmNvbnRyYWRvIFNFVCBpbnbhbGlkbzogezB9DQptYXJrdXBwYXJzZXIuZXJyb3Iubm9pbnRlcndpa2lyZWYgPSBOZW5odW1hIHJlZmVy6m5jaWEgSW50ZXJXaWtpIGRlZmluaWRhIGVtIHByb3ByaWVkYWRlcyBwYXJhIGEgV2lraSBjaGFtYWRhICJ7MH0iIQ0KbWFya3VwcGFyc2VyLmVycm9yLnBhcnNlcmZhaWx1cmUgPSBFcnJvIGRlIHBhcnNlcjogezB9DQptYXJrdXBwYXJzZXIuZXJyb3IuamF2YXNjcmlwdGF0dGVtcHQgPSBUZW50YXRpdmEgZGUgZ2VyYefjbyBkZSBqYXZhc2NyaXB0IQ0KbWFya3VwcGFyc2VyLmxpbmsuY3JlYXRlID0gQ3JpYXIgInswfSINCg0KIyBDYXB0Y2hhLmpzcA0KY2FwdGNoYS5qcy5odW1hbmNoZWNrY29tcGxldGUuYWxlcnQ9UG9yIGZhdm9yIGlkZW50aWZpcXVlIGNvcnJldGFtZW50ZSBvcyBnYXRpbmhvcy4NCmNhcHRjaGEuZGVzY3JpcHRpb249TvNzIGFjcmVkaXRhbW9zIHF1ZSB2b2PqIHBvc3NhIHZpciBhIHNlciB1bSByb2L0IG91IHVtIHNwYW1tZXIuICBWb2PqIHBvZGUgcG9yIGZhdm9yIGVzY29saGVyIG9zIGdhdGluaG9zIFwNCiAgICAgICAgICAgICAgICAgICAgZG8gY29uanVudG8gYWJhaXhvIGRlIGltYWdlbnMsIHBhcmEgcXVlIG7zcyBzYWliYW1vcyBxdWUgdm9j6iDpIHVtIHNlciBodW1hbm8/DQpjYXB0Y2hhLmFzaXJyYS5wbGVhc2Uuc2VsZWN0PVBvciBmYXZvciBzZWxlY2lvbmUgdG9kYXMgYXMgaW1hZ2VucyBkZSBnYXRvczoNCmNhcHRjaGEuYXNpcnJhLmFkb3B0Lm1lPU1lIGFkb3RlDQpjYXB0Y2hhLmFzaXJyYS5hLmdldC5jaGFsbGVuZ2U9UGVkaXIgaW1hZ2VucyBkaWZlcmVudGVzLg0KY2FwdGNoYS5hc2lycmEuYS53aGF0c3RoaXM9TyBxdWUg6SBpc3NvPw0KY2FwdGNoYS5zdWJtaXQ9RW52aWFyDQoNCiMgSW5zdGFsbC5qc3ANCmluc3RhbGwuanNwLnRpdGxlPUluc3RhbGFkb3IgSlNQV2lraQ0KaW5zdGFsbC5qc3AuaW50cm8udGl0bGU9SW5zdGFsYWRvciBKU1BXaWtpDQppbnN0YWxsLmpzcC5pbnRyby5wMT1CZW0gdmluZG8hICBFc3RhIHBlcXVlbmEgcOFnaW5hIEpTUCBlc3ThIGFxdWkgcGFyYSBsaGUgYWp1ZGFyIG5vIHByaW1laXJvIHBhc3NvIGRhIGluc3RhbGHn428gZGEgSlNQV2lraS4gXA0KCQkJCQkgU2Ugdm9j6iBlc3ThIHZlbmRvIGVzc2EgcOFnaW5hLCB2b2PqIGluc3RhbG91IGNvcnJldGFtZW50ZSBhIEpTUFdpa2kgbm8gc2V1IGNvbnRhaW5lci4NCmluc3RhbGwuanNwLmludHJvLnAyPUFnb3JhIGjhIGFsZ3VtYXMgY29pc2FzIHF1ZSB2b2PqIGRldmUgY29uZmlndXJhci4gUXVhbmRvIHZvY+ogYXBlcnRhciBDb25maWd1cmFyLCBvIGFycXVpdm8gXA0KCQkJCQkgPGNvZGU+anNwd2lraS5wcm9wZXJ0aWVzPC9jb2RlPiBzZXLhIG1vZGlmaWNhZG8sIG91IHNlIGVsZSBu428gZm9yIGVuY29udHJhZG8sIHVtIG5vdm8gc2Vy4SBjcmlhZG8uDQppbnN0YWxsLmpzcC5pbnRyby5wMz1Fc3RhIG9w5+NvIGRlIGluc3RhbGHn428g6SBwYXJhIHBlc3NvYXMgcXVlIGRlc2VqYW0gYSBKU1BXaWtpIGZ1bmNpb25hbmRvIHJhcGlkYW1lbnRlLiBTZSB2b2PqIGRlc2VqYSBcDQoJCQkJCSBpbnRlZ3JhciBhIEpTUFdpa2kgY29tIHVtIHNpc3RlbWEgZXhpc3RlbnRlIGV1IHJlY29tZW5kbyBxdWUgdm9j6iBlZGl0ZSBvIGFycXVpdm8gPGNvZGU+anNwd2lraS5wcm9wZXJ0aWVzPC9jb2RlPiBcDQoJCQkJCSBkaXJldGFtZW50ZS4gVm9j6iBwb2RlIGVuY29udHJhciB1bSBleGVtcGxvIGRvIGFycXVpdm8gZGUgY29uZmlndXJh5+NvIGVtIDxjb2RlPnN1YXdpa2kvV0VCLUlORi88L2NvZGU+Lg0KaW5zdGFsbC5qc3AuaW5zdGFsbC5pbmZvPUJvYXMgbm907WNpYXM6IA0KaW5zdGFsbC5qc3AuaW5zdGFsbC53YXJuaW5nPUF2aXNvOiANCmluc3RhbGwuanNwLmluc3RhbGwuZXJyb3I9QSBjb25maWd1cmHn428gbuNvIHBvZGUgc2VyIHNhbHZhOiANCmluc3RhbGwuanNwLmluc3RhbGwubXNnLnJuZC5wd2Q9Q29tbyB1bWEgY29udGEgZGUgYWRtaW5pc3RyYWRvciBhaW5kYSBu428gZXhpc3RlLCBhIEpTUFdpa2kgY3Jpb3UgdW1hIHBhcmEgdm9j6iBjb20gdW1hIHNlbmhhIGFsZWF083JpYS4gXA0KCQkJCQkJCQlWb2PqIHBvZGUgYWx0ZXJhciBhIHNlbmhhIG1haXMgdGFyZGUuIE8gaWQgZGEgY29udGEg6SB7MH0gZSBhIHNlbmhhIOkgezF9LiBQb3IgZmF2b3IgYW5vdGUgZXN0YSBpbmZvcm1h5+NvIFwNCgkJCQkJCQkJZSBhIG1hbnRlbmhhIGVtIGxvY2FsIHNlZ3Vyby4gQSBKU1BXaWtpIHRhbWLpbSBjcmlvdSB1bSBncnVwbyB3aWtpIGNoYW1hZG8gezJ9IHF1ZSBjb2506W0gZXN0YSBjb250YS4NCmluc3RhbGwuanNwLmluc3RhbGwubXNnLmFkbWluLm5vdGV4aXN0cz1Fc3RhIOkgYSBwcmltZWlyYSB2ZXogcXVlIHZvY+ogZXhlY3V0YSBvIEluc3RhbGFkb3I/IFNlIGZvciwgdm9j6iBkZXZlIHNhYmVyIHF1ZSBhcPNzIGEgSlNQV2lraSBcDQoJCQkJCQkJCQkJdmFsaWRhciBlIHNhbHZhciBzdWFzIGNvbmZpZ3VyYef1ZXMgcGVsYSBwcmltZWlyYSB2ZXosIHZvY+ogcHJlY2lzYXLhIGRlIHByaXZpbOlnaW9zIGFkbWluaXN0cmF0aXZvcyBcDQoJCQkJCQkJCQkJcGFyYSBhY2Vzc2FyIGVzdGEgcOFnaW5hIG5vdmFtZW50ZS4gTvNzIGZhemVtb3MgaXNzbyBwYXJhIHByZXZpbmlyIHF1ZSBwZXNzb2FzIG1hbCBpbnRlbmNpb25hZGFzIFwNCgkJCQkJCQkJCQlmYedhbSBhbHRlcmHn9WVzIG5hIHN1YSB3aWtpLg0KDQppbnN0YWxsLmpzcC5iYXNpY3MudGl0bGU9TyBi4XNpY28NCmluc3RhbGwuanNwLmJhc2ljcy5hcHBuYW1lLmxhYmVsPU5vbWUgZGEgYXBsaWNh5+NvDQppbnN0YWxsLmpzcC5iYXNpY3MuYXBwbmFtZS5kZXNjPUNvbW8gYSBzdWEgd2lraSBkZXZlIHNlciBjaGFtYWRhPyAgVGVudGUgdXRpbGl6YXIgdW0gbm9tZSBwZXF1ZW5vIGUgc2ltcGxlcy4NCmluc3RhbGwuanNwLmJhc2ljcy5iYXNldXJsLmxhYmVsPVVSTCBCYXNlDQppbnN0YWxsLmpzcC5iYXNpY3MuYmFzZXVybC5kZXNjPVBvciBmYXZvciBkaWEg4CBKU1BXaWtpIG8gbG9jYWwgb25kZSBlc3ThIGFybWF6ZW5hZGEgYSBzdWEgd2lraS4NCmluc3RhbGwuanNwLmJhc2ljcy5wYWdlLnN0b3JhZ2UubGFiZWw9QXJtYXplbmFtZW50byBkZSBw4WdpbmENCmluc3RhbGwuanNwLmJhc2ljcy5wYWdlLnN0b3JhZ2UuZGVzYz1Qb3IgcGFkcuNvLCBhIEpTUFdpa2kgdXNhcuEgbyBWZXJzaW9uaW5nRmlsZVByb3ZpZGVyIHF1ZSBhcm1hemVuYSBhcnF1aXZvcyBlbSB1bSBlc3BlY+1maWNvIGRpcmV083JpbyBcDQoJCQkJCQkJCQkgbm8gc2V1IGRpc2NvIHLtZGlnby4gU2Ugdm9j6iBlc3BlY2lmaWNhciB1bSBkaXJldPNyaW8gaW5leGlzdGVudGUsIGEgSlNQV2lraSBpcuEgY3JpYXIgdW0gcGFyYSB2b2PqLiBcDQoJCQkJCQkJCQkgVG9kb3Mgb3MgYW5leG9zIHRhbWLpbSBzZXLjbyBhcm1hemVuYWRvcyBubyBtZXNtbyBkaXJldPNyaW8uDQoNCmluc3RhbGwuanNwLnNlY3VyaXR5LnRpdGxlPVNlZ3VyYW7nYQ0KaW5zdGFsbC5qc3Auc2VjdXJpdHkuc2VjLmNvbmYubGFiZWw9Q29uZmlndXJh5/VlcyBkZSBzZWd1cmFu52ENCmluc3RhbGwuanNwLnNlY3VyaXR5LnNlYy5jb25mLm9wdDE9SkFBUyBtYWlzIHVtIGNvbnRhaW5lciBkZSBzZWd1cmFu52EgKHBhZHLjbykNCmluc3RhbGwuanNwLnNlY3VyaXR5LnNlYy5jb25mLm9wdDI9Q29udGFpbmVyIGRlIHNlZ3VyYW7nYSBhcGVuYXMNCmluc3RhbGwuanNwLnNlY3VyaXR5LnNlYy5jb25mLmRlc2M9UG9yIHBhZHLjbywgYSBKU1BXaWtpIGdlcmVuY2lhIG8gYWNlc3NvIOAgcmVjdXJzb3MgdXNhbmRvIHVtIHNpc3RlbWEgZGUgc2VndXJhbudhIGJhc2VhZG8gZW0gSkFBUy4gXA0KCQkJCQkJCQkgICBFbGEgdGFtYultIHJlc3BlaXRhcuEgcXVhaXNxdWVyIHJlc3Ryaef1ZXMgcXVlIG8gc2V1IGNvbnRhaW5lciBkZSBzYWd1cmFu52EgcG9zc2EgdGVyLCBzZSB2b2PqIFwNCgkJCQkJCQkJICAgYXMgYXRpdm91IG5vIGFycXVpdm8gPGNvZGU+d2ViLnhtbDwvY29kZT4uIFNlIHZvY+ogZGVzYXRpdmFyIGEgc2VndXJhbudhIHBvciBKQUFTLCBhIEpTUFdpa2kgXA0KCQkJCQkJCQkgICBwb2RlIG7jbyBmdW5jaW9uYXIgY29tbyBvIGVzcGVyYWRvLiBNYXMgZW0gYWxndW1hcyBvY2FzafVlcyB2b2PqIHBvZGUgcXVlcmVyIGZhemVyIGlzc28sIHBvciBleGVtcGxvIFwNCgkJCQkJCQkJICAgc2UgZXN0aXZlciB0ZW50YW5kbyBjb25zZXJ0YXIgZXJyb3MuDQppbnN0YWxsLmpzcC5zZWN1cml0eS5hZG1hY2NvdW50LmxhYmVsPUNvbnRhIGRlIGFkbWluaXN0cmFkb3INCmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQuZW5hYmxlZD1BdGl2YWRhDQppbnN0YWxsLmpzcC5zZWN1cml0eS5hZG1hY2NvdW50Lm5vdGVuYWJsZWQ9RGVzYXRpdmFkYQ0KaW5zdGFsbC5qc3Auc2VjdXJpdHkuYWRtYWNjb3VudC5lbmFibGVkLmRlc2M9RXN0YSB3aWtpIHBvc3N1aSB1bWEgY29udGEgZGUgYWRtaW5pc3RyYWRvciBjaGFtYWRhIDxzdHJvbmc+YWRtaW48L3N0cm9uZz4gcXVlIHBlcnRlbmNlIGFvIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydXBvIHdpa2kgPHN0cm9uZz5BZG1pbjwvc3Ryb25nPi4gUG9yIHBhZHLjbywgYSBwb2ztdGljYSBkZSBzZWd1cmFu52EgZGEgSlNQV2lraSBnYXJhbnRlIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOAgdG9kb3Mgb3MgbWVtYnJvcyBkbyBncnVwbyBBZG1pbiBhcyBwb2Rlcm9zYXMgcGVybWlzc/VlcyA8Y29kZT5BbGxQZXJtaXNzaW9uPC9jb2RlPi4NCmluc3RhbGwuanNwLnNlY3VyaXR5LmFkbWFjY291bnQubm90ZW5hYmxlZC5kZXNjPUVzdGEgd2lraSBu428gYXBhcmVudGEgdGVyIHVtYSBjb250YSBkZSBhZG1pbmlzdHJhZG9yLiBRdWFuZG8gdm9j6iBjbGljYXIgZW0gXA0KCQkJCQkJCQkJCQkJPGVtPkNvbmZpZ3VyYXIhPC9lbT4gYSBKU1BXaWtpIGNyaWFy4SB1bWEgcGFyYSB2b2PqLg0KDQppbnN0YWxsLmpzcC5hZHYuc2V0dGluZ3MudGl0bGU9Q29uZmlndXJh5/VlcyBhdmFu52FkYXMNCmluc3RhbGwuanNwLmFkdi5zZXR0aW5ncy5sb2dmaWxlLmxhYmVsPUFycXVpdm9zIGRlIGxvZw0KaW5zdGFsbC5qc3AuYWR2LnNldHRpbmdzLmxvZ2ZpbGUuZGVzYz1BIEpTUFdpa2kgdXRpbGl6YSBvIEFwYWNoZSBMb2c0aiBwYXJhIG9zIGxvZ3MuIFBvciBmYXZvciBkaWdhIOAgSlNQV2lraSBvZG5lIG9zIGFycXVpdm9zIGRlIGxvZyBcDQoJCQkJCQkJCQkgIGRldmVtIGlyLg0KaW5zdGFsbC5qc3AuYWR2LnNldHRpbmdzLndvcmtkaXIubGFiZWw9RGlyZXTzcmlvIGRlIHRyYWJhbGhvDQppbnN0YWxsLmpzcC5hZHYuc2V0dGluZ3Mud29ya2Rpci5kZXNjPUVzdGEg6SBvIGx1Z2FyIG9uZGUgbyBjYWNoZSBlIHRvZGFzIGFzIGNvaXNhcyBkZSBydW50aW1lIHPjbyBhcm1hemVuYWRhcy4NCmluc3RhbGwuanNwLmluc3RyLmRlc2M9QXDzcyB2b2PqIGNsaWNhciBlbSA8ZW0+Q29uZmlndXJhciE8L2VtPiwgbyBpbnN0YWxhZG9yIGVzY3JldmVy4SBzdWFzIHByZWZlcupuY2lhcyBlbSA8Y29kZT57MH08L2NvZGU+LiBcDQoJCQkJCSAgIFRhbWLpbSBjcmlhcuEgdW1hIGNvbnRhIGRlIEFkbWluaXN0cmFkb3IgY29tIHVtYSBzZW5oYSBhbGVhdPNyaWEgZSB1bSBncnVwbyBBZG1pbiBjb3JyZXNwb25kZW50ZS4JCQkgICAgDQppbnN0YWxsLmpzcC5pbnN0ci5zdWJtaXQ9Q29uZmlndXJhciENCmluc3RhbGwuanNwLnZhbGlkYXRlZC5uZXcucHJvcHM9QXF1aSBlc3ThIG8gc2V1IG5vdm8gYXJxdWl2byBqc3B3aWtpLnByb3BlcnRpZXMNCg0KIyBJbnN0YWxsZXIuamF2YQ0KaW5zdGFsbC5pbnN0YWxsZXIudW5hYmxlLnJlYWQucHJvcHM9TuNvIGZvaSBwb3Nz7XZlbCBsZXIgYXMgcHJvcHJpZWRhZGVzOiB7MH0NCmluc3RhbGwuaW5zdGFsbGVyLmRlZmF1bHQuYXBwbmFtZT1NaW5oYVdpa2kNCmluc3RhbGwuaW5zdGFsbGVyLmRlZmF1bHQucGFnZWRpcj1Qb3IgZmF2b3IgbWUgY29uZmlndXJlIQ0KaW5zdGFsbC5pbnN0YWxsZXIucHJvcHMuc2F2ZWQ9U3VhcyBub3ZhcyBwcm9wcmllZGFkZXMgZm9yYW0gc2FsdmFzLiAgUG9yIGZhdm9yIHJlaW5pY2llIG8gc2V1IGNvbnRhaW5lciAoYSBu428gc2VyIHF1ZSBlc3RhIHNlamEgXA0KCQkJCQkJCSAgc3VhIHByaW1laXJhIGluc3RhbGHn428pLiAgRGVz52EgdW0gcG91Y28gcGFyYSB2ZXIgbyBzZXUgbm92byBhcnF1aXZvIGpzcHdpa2kucHJvcGVydGllcy4NCmluc3RhbGwuaW5zdGFsbGVyLnByb3BzLm5vdHNhdmVkPU7jbyBmb2kgcG9zc+12ZWwgZXNjcmV2ZXIgYXMgcHJvcHJpZWRhZGVzOiB7MH0uIFBvciBmYXZvciBjb3BpZSBvIGFycXVpdm8gYWJhaXhvIGNvbW8gbyBzZXUgXA0KCQkJCQkJCQkganNwd2lraS5wcm9wZXJ0aWVzOlxuezF9DQppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS5iYXNldXJsPVZvY+ogZGV2ZSBkZWZpbmlyIGEgVVJMIGJhc2UgcGFyYSBlc3RhIHdpa2kuDQppbnN0YWxsLmluc3RhbGxlci52YWxpZGF0ZS5wYWdlZGlyPVZvY+ogZGV2ZSBkZWZpbmlyIG8gbG9jYWwgb25kZSBvcyBhcnF1aXZvcyBzZXLjbyBhcm1hemVuYWRvcy4NCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLmFwcG5hbWU9Vm9j6iBkZXZlIGRlZmluaXIgbyBub21lIGRhIGFwbGljYefjby4NCmluc3RhbGwuaW5zdGFsbGVyLnZhbGlkYXRlLndvcmtkaXI9Vm9j6iBkZXZlIGRlZmluaXIgdW0gZGlyZXTzcmlvIGRlIHRyYWJhbGhvLg0KaW5zdGFsbC5pbnN0YWxsZXIudmFsaWRhdGUubG9nZGlyPVZvY+ogZGV2ZSBkZWZpbmlyIHVtIGRpcmV083JpbyBwYXJhIGxvZ3MuDQoNCiMgUlNTSW1hZ2VMaW5rVGFnDQpyc3MudGl0bGU9UlNTIGZlZWQgcGFyYSBw4WdpbmEgezB9DQoNCiMgQXR0YWNobWVudE1hbmFnZXINCmF0dGFjaC51bndhbnRlZC5maWxlPU5vbWUgZGUgYXJxdWl2byBpbnbhbGlkby4NCmF0dGFjaC5lbXB0eS5maWxlPU5vbWUgZGUgYXJxdWl2byBkYWRvIGVtIGJyYW5jby4NCmF0dGFjaC5wYXJlbnQubm90LmV4aXN0PVDhZ2luYSBwYWkgbuNvIGV4aXN0ZQ0KDQojIFZhcmlhYmxlTWFuYWdlcg0KdmFybWdyLm5vdC5sb2dnZWQuaW49buNvIGF1dGVudGljYWRvDQp2YXJtZ3IuYXV0aGVudGljYXRlZD1hdXRlbnRpY2Fkbw0KdmFybWdyLmFzc2VydGVkPWlkZW50aWZpY2Fkbw0KdmFybWdyLmFub255bW91cz1hbvRuaW1vDQo=