{"id":6386,"date":"2026-07-10T16:22:53","date_gmt":"2026-07-10T16:22:53","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-9-test-1-speaking\/"},"modified":"2026-07-12T03:16:20","modified_gmt":"2026-07-12T03:16:20","slug":"celpip-set-9-test-1-speaking","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-9-test-1-speaking\/","title":{"rendered":"CELPIP Speaking \u2014 Set 9 \u00b7 Practice Test 1"},"content":{"rendered":"<div id=\"clp-spk-root\" style=\"min-height:300px\">\n<p style=\"text-align:center;padding:40px 0;color:#888\">Loading CELPIP Speaking\u2026<\/p>\n<\/div>\n<p><script>eval(atob(\"d2luZG93LkNMUFNQS19EQVRBPXsic2V0Ijo5LCJ0ZXN0IjoxLCJ0aXRsZSI6IkNFTFBJUCBTcGVha2luZyBcdTIwMTQgU2V0IDkgXHUwMGI3IFByYWN0aWNlIFRlc3QgMSIsImhlYWRlciI6IlByYWN0aWNlIFRlc3QgMSIsImltZ3MiOnsic2NlbmUiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczl0MS1zY2VuZS5qcGciLCJvcHRBIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3M5dDEtb3B0LWEuanBnIiwib3B0QiI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9zOXQxLW9wdC1iLmpwZyIsIm9wdE90aGVyIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3M5dDEtb3B0LW90aGVyLmpwZyIsInVudXN1YWwiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczl0MS11bnVzdWFsLmpwZyJ9LCJvdGhlclVybCI6Ii9jZWxwaXAtc2V0LTktdGVzdC0yLXNwZWFraW5nLyIsInRhc2tzIjpbeyJrIjoidyIsIm51bSI6MCwidHlwZUVuIjoiU3BlYWtpbmcgUHJhY3RpY2UgVGFzayIsInByZXAiOjMwLCJyZWMiOjYwLCJ3YXJtdXAiOnRydWUsInByb21wdCI6IlRhbGsgYWJvdXQgb25lIG9mIHlvdXIgYmVzdCBmcmllbmRzLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlRoZSBQcmFjdGljZSBUYXNrICh3YXJtLXVwKSBpcyBOT1Qgc2NvcmVkIFx1MjAxNCBpdCBpcyBoZXJlIHRvIGhlbHAgeW91IGdldCB1c2VkIHRvIHRoZSBjb250cm9scyBhbmQgd2FybSB1cCB5b3VyIHZvaWNlLiIsIlNwZWFrIG5hdHVyYWxseSBhYm91dCBhIGJlc3QgZnJpZW5kOiB0aGVpciBuYW1lLCBob3cgeW91IG1ldCwgdGhlaXIgcGVyc29uYWxpdHksIGEgbWVtb3J5IHlvdSBzaGFyZS4iLCJVc2UgaXQgdG8gYWRqdXN0IHlvdXIgcG9zdHVyZSwgbWljcm9waG9uZSBkaXN0YW5jZSwgYW5kIHNwZWFraW5nIHBhY2UuIl0sInBocmFzZXMiOlsiTXkgYmVzdCBmcmllbmQncyBuYW1lIGlzXHUyMDI2IiwiV2UgbWV0IHdoZW5cdTIwMjYiLCJXaGF0IEkgbGlrZSBtb3N0IGFib3V0IGhpbS9oZXIgaXNcdTIwMjYiXX0sInM2IjpudWxsLCJzOSI6bnVsbH0seyJrIjoidDEiLCJudW0iOjEsInR5cGVFbiI6IkdpdmluZyBBZHZpY2UiLCJwcmVwIjozMCwicmVjIjo5MCwicHJvbXB0IjoiT25lIG9mIHlvdXIgZnJpZW5kcyB3aWxsIHNvb24gYmUgdGFraW5nIGhlciBmaXJzdCB1bml2ZXJzaXR5IGV4YW0uIEdpdmUgaGVyIGFkdmljZSBhYm91dCB3aGF0IHRvIGRvIGJlZm9yZSwgZHVyaW5nLCBhbmQgYWZ0ZXIgdGhlIGV4YW0uIiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiT3BlbmluZzogZ3JlZXQgeW91ciBmcmllbmQgYW5kIHJlc3RhdGUgdGhlIHNpdHVhdGlvbiBpbiBvbmUgc2VudGVuY2UuIiwiQm9keTogZ2l2ZSAyXHUyMDEzMyBwaWVjZXMgb2YgYWR2aWNlLCBlYWNoIHdpdGggYSByZWFzb24gb3IgZXhhbXBsZSAoRmlyc3RcdTIwMjYsIGJlY2F1c2VcdTIwMjY7IEFub3RoZXIgaWRlYSBpc1x1MjAyNikuIiwiQ2xvc2luZzogZW5jb3VyYWdlIHRoZW0gYW5kIHdpc2ggdGhlbSBsdWNrLiIsIlRoZSBwcm9tcHQgaGFuZHMgeW91IHRoZSBzdHJ1Y3R1cmU6IEJFRk9SRSAoc3R1ZHkgc2NoZWR1bGUsIHBhc3QgZXhhbSBwYXBlcnMsIGdvb2Qgc2xlZXAsIHBhY2sgZXZlcnl0aGluZyB0aGUgbmlnaHQgYmVmb3JlKSAtIERVUklORyAocmVhZCBldmVyeSBxdWVzdGlvbiBmaXJzdCwgZG8gdGhlIGVhc3kgb25lcyBlYXJseSwgd2F0Y2ggdGhlIGNsb2NrLCBuZXZlciBsZWF2ZSBibGFua3MpIC0gQUZURVIgKGRvbid0IG9ic2Vzc2l2ZWx5IGNvbXBhcmUgYW5zd2VycywgcmVzdCwgbm90ZSB3aGF0IHdvcmtlZCBmb3IgbmV4dCB0aW1lKS4iXSwicGhyYXNlcyI6WyJJZiBJIHdlcmUgeW91LCBJJ2RcdTIwMjYiLCJZb3Ugc2hvdWxkIGRlZmluaXRlbHlcdTIwMjYiLCJBbm90aGVyIG9wdGlvbiBpcyB0b1x1MjAyNiIsIlRydXN0IG1lLCB5b3Ugd29uJ3QgcmVncmV0IGl0LiJdfSwiczYiOiJFbW1hLCB5b3VyIGZpcnN0IHVuaXZlcnNpdHkgZXhhbSBcdTIwMTQgaG93IGV4Y2l0aW5nISBEbyBub3QgYmUgc2NhcmVkLCBsZXQgbWUgZ2l2ZSB5b3UgYWR2aWNlIGZvciBiZWZvcmUsIGR1cmluZywgYW5kIGFmdGVyLiBCZWZvcmUgdGhlIGV4YW06IHN0YXJ0IHN0dWR5aW5nIGVhcmx5LCBub3QgdGhlIG5pZ2h0IGJlZm9yZS4gTWFrZSBhIHNpbXBsZSBwbGFuIFx1MjAxNCBvbmUgdG9waWMgZWFjaCBkYXkgXHUyMDE0IGFuZCBmaW5kIG9sZCBleGFtcyBmcm9tIHBhc3QgeWVhcnMsIGJlY2F1c2UgcHJvZmVzc29ycyBvZnRlbiByZXBlYXQgdGhlIHN0eWxlIG9mIHRoZSBxdWVzdGlvbnMuIFRoZSBuaWdodCBiZWZvcmUsIHBsZWFzZSBzbGVlcCBlaWdodCBob3Vycy4gQSB0aXJlZCBicmFpbiBmb3JnZXRzIGV2ZXJ5dGhpbmcuIEFsc28sIHByZXBhcmUgeW91ciBiYWcgaW4gdGhlIGV2ZW5pbmc6IHN0dWRlbnQgY2FyZCwgcGVucywgd2F0ZXIsIGFuZCBhIHNtYWxsIHNuYWNrLiBEdXJpbmcgdGhlIGV4YW06IGZpcnN0LCByZWFkIGFsbCB0aGUgcXVlc3Rpb25zIHF1aWNrbHksIHNvIHlvdXIgYnJhaW4gc3RhcnRzIHRoaW5raW5nLiBUaGVuIGFuc3dlciB0aGUgZWFzeSBxdWVzdGlvbnMgZmlyc3QgXHUyMDE0IHRoZXkgZ2l2ZSB5b3UgcG9pbnRzIGFuZCBjb25maWRlbmNlLiBXYXRjaCB0aGUgY2xvY2ssIGFuZCBsZWF2ZSB0ZW4gbWludXRlcyBhdCB0aGUgZW5kIHRvIGNoZWNrIHlvdXIgYW5zd2Vycy4gTmV2ZXIgbGVhdmUgYSBxdWVzdGlvbiBlbXB0eTsgd3JpdGUgc29tZXRoaW5nLCBiZWNhdXNlIGFuIGVtcHR5IGFuc3dlciBpcyBhbHdheXMgemVyby4gQWZ0ZXIgdGhlIGV4YW06IGRvIG5vdCBzdGFuZCB3aXRoIGNsYXNzbWF0ZXMgY29tcGFyaW5nIGV2ZXJ5IGFuc3dlciBcdTIwMTQgaXQgb25seSBtYWtlcyB5b3UgbmVydm91cywgYW5kIHlvdSBjYW5ub3QgY2hhbmdlIGFueXRoaW5nLiBHbyBob21lLCBlYXQgc29tZXRoaW5nIG5pY2UsIHJlc3QsIGFuZCB3cml0ZSBkb3duIHdoYXQgd29ya2VkIGFuZCB3aGF0IGRpZCBub3QsIHNvIHRoZSBuZXh0IGV4YW0gaXMgZWFzaWVyLiBZb3Ugd2lsbCBkbyBncmVhdCwgRW1tYS4gR29vZCBsdWNrISIsInM5IjoiRW1tYSwgZmlyc3QgdW5pdmVyc2l0eSBleGFtIFx1MjAxNCBiaWcgbW9tZW50LCB0b3RhbGx5IG1hbmFnZWFibGUsIGFuZCB0aGUgZmFjdCB0aGF0IHlvdSdyZSBhc2tpbmcgZm9yIGFkdmljZSBhbHJlYWR5IHB1dHMgeW91IGFoZWFkLiBMZXQgbWUgYnJlYWsgaXQgZG93biB0aGUgd2F5IHRoZSBxdWVzdGlvbiBkZXNlcnZlczogYmVmb3JlLCBkdXJpbmcsIGFmdGVyLiBCZWZvcmU6IHRoZSBnb2xkZW4gcnVsZSBpcyB0aGF0IGV4YW1zIGFyZSB3b24gaW4gdGhlIHR3byB3ZWVrcyBwcmlvciwgbm90IHRoZSBuaWdodCBiZWZvcmUuIEJ1aWxkIGEgbGlnaHQgcmV2aXNpb24gdGltZXRhYmxlIFx1MjAxNCBvbmUgdG9waWMgcGVyIGRheSwgd2l0aCB0aGUgaGFyZGVzdCBtYXRlcmlhbCBlYXJsaWVzdCB3aGlsZSB5b3VyIG1vdGl2YXRpb24gaXMgZnJlc2ggXHUyMDE0IGFuZCBodW50IGRvd24gcGFzdCBwYXBlcnMsIGJlY2F1c2UgdW5pdmVyc2l0eSBleGFtcyBhcmUgc2hvY2tpbmdseSBjb25zaXN0ZW50IGluIHN0eWxlOyBwcmFjdGlzaW5nIHRoZSBmb3JtYXQgbWF0dGVycyBhbG1vc3QgYXMgbXVjaCBhcyBrbm93aW5nIHRoZSBjb250ZW50LiBUaGUgZmluYWwgbmlnaHQgaXMgc2FjcmVkOiBubyBjcmFtbWluZyBwYXN0IGRpbm5lciwgYSBmdWxsIG5pZ2h0J3Mgc2xlZXAsIGFuZCBwYWNrIHlvdXIgYmFnIGJlZm9yZSBiZWQgXHUyMDE0IHN0dWRlbnQgSUQsIGFwcHJvdmVkIGNhbGN1bGF0b3IsIHNwYXJlIHBlbnMsIHdhdGVyLiBBIHJlc3RlZCBicmFpbiB3aWxsIGJlYXQgYSBjcmFtbWVkIG9uZSBldmVyeSB0aW1lLiBEdXJpbmc6IHNwZW5kIHRoZSBmaXJzdCBmaXZlIG1pbnV0ZXMgcmVhZGluZyB0aGUgd2hvbGUgcGFwZXIgXHUyMDE0IGl0IGxldHMgeW91ciBzdWJjb25zY2lvdXMgc3RhcnQgd29ya2luZyBvbiB0aGUgaGFyZCBxdWVzdGlvbnMgd2hpbGUgeW91IGhhbmRsZSB0aGUgZWFzeSBvbmVzLCB3aGljaCB5b3Ugc2hvdWxkIGRvIGZpcnN0IHRvIGJhbmsgcG9pbnRzIGFuZCBjYWxtIHlvdXIgbmVydmVzLiBCdWRnZXQgdGltZSBwZXIgcXVlc3Rpb24gYW5kIGJlIHJ1dGhsZXNzOiBhIHBlcmZlY3QgYW5zd2VyIHRvIHF1ZXN0aW9uIHR3byBpcyB3b3J0aGxlc3MgaWYgcXVlc3Rpb25zIGZpdmUgYW5kIHNpeCBhcmUgYmxhbmsuIEFuZCBuZXZlciwgZXZlciBsZWF2ZSBhIGJsYW5rIFx1MjAxNCBwYXJ0aWFsIGFuc3dlcnMgZWFybiBwYXJ0aWFsIG1hcmtzLiBBZnRlcjogc3RlcCBhd2F5IGZyb20gdGhlIGNyb3dkIGRvaW5nIHRoZSBwb3N0LW1vcnRlbSBvdXRzaWRlIHRoZSBoYWxsOyBjb21wYXJpbmcgYW5zd2VycyBjaGFuZ2VzIG5vdGhpbmcgYW5kIHJ1aW5zIHlvdXIgYWZ0ZXJub29uLiBUcmVhdCB5b3Vyc2VsZiB0byBhIHByb3BlciBtZWFsLCByZXN0LCBhbmQgXHUyMDE0IHRoaXMgaXMgdGhlIGhhYml0IHRoYXQgc2VwYXJhdGVzIGdvb2Qgc3R1ZGVudHMgXHUyMDE0IHNwZW5kIHRlbiBtaW51dGVzIHdyaXRpbmcgZG93biB3aGF0IHlvdSdkIGRvIGRpZmZlcmVudGx5LiBUaGF0IGxpdHRsZSBub3RlIGJlY29tZXMgZ29sZCBiZWZvcmUgZXhhbSBudW1iZXIgdHdvLiBZb3UndmUgZ290IHRoaXMsIEVtbWEgXHUyMDE0IGdvIHNob3cgdGhhdCBleGFtIHdobydzIGJvc3MuIn0seyJrIjoidDIiLCJudW0iOjIsInR5cGVFbiI6IlRhbGtpbmcgYWJvdXQgYSBQZXJzb25hbCBFeHBlcmllbmNlIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IlRhbGsgYWJvdXQgYSB0aW1lIHdoZW4geW91IHZpc2l0ZWQgYSBwb3B1bGFyIHRvdXJpc3QgYXR0cmFjdGlvbiwgZWl0aGVyIGluIHlvdXIgY291bnRyeSBvciBpbiBhIGRpZmZlcmVudCBjb3VudHJ5LiBNYXliZSB5b3UgY2FuIHRhbGsgYWJvdXQgYSBmYW1vdXMgbW9udW1lbnQsIGEgYmVhdXRpZnVsIHBhcmssIG9yIGEgbXVzZXVtLiBXaGVyZSBkaWQgeW91IGdvLCB3aGF0IGRpZCB5b3UgZG8gdGhlcmUsIGFuZCB3aGF0IG1hZGUgdGhlIGV4cGVyaWVuY2UgbWVtb3JhYmxlPyIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIkFuc3dlciBldmVyeSBwYXJ0IG9mIHRoZSBxdWVzdGlvbiAod2hhdCBoYXBwZW5lZCBcdTIwMTMgaG93IGl0IHVuZm9sZGVkIFx1MjAxMyB0aGUgb3V0Y29tZSAvIHdoeSBpdCBpcyBtZW1vcmFibGUpLiIsIlVzZSBwYXN0IHRlbnNlcyBhbmQgdGVsbCBpdCBpbiBvcmRlcjogVGhpcyBoYXBwZW5lZFx1MjAyNiBcdTIxOTIgVGhlblx1MjAyNiBcdTIxOTIgSW4gdGhlIGVuZFx1MjAyNiIsIkZpbmlzaCB3aXRoIGEgZmVlbGluZyBvciBhIGxlc3NvbiBsZWFybmVkLiIsIkFuc3dlciB0aGUgdGhyZWUgcGFydHM6IHdoZXJlIHlvdSB3ZW50IC0gd2hhdCB5b3UgZGlkIHRoZXJlIC0gd2hhdCBtYWRlIGl0IG1lbW9yYWJsZS4gT25lIHZpdmlkIHNlbnNvcnkgZGV0YWlsICh0aGUgc291bmQsIHRoZSBtaXN0LCB0aGUgY3Jvd2QpIG1ha2VzIHRoZSBtZW1vcnkgZmVlbCByZWFsLiJdLCJwaHJhc2VzIjpbIlRoaXMgaGFwcGVuZWQgYWJvdXQgdHdvIHllYXJzIGFnb1x1MjAyNiIsIkF0IGZpcnN0XHUyMDI2LCBidXQgdGhlblx1MjAyNiIsIldoYXQgbWFkZSBpdCB1bmZvcmdldHRhYmxlIHdhc1x1MjAyNiIsIkxvb2tpbmcgYmFjaywgXHUyMDI2Il19LCJzNiI6Ikkgd2FudCB0byB0YWxrIGFib3V0IG15IHZpc2l0IHRvIE5pYWdhcmEgRmFsbHMsIHRocmVlIHllYXJzIGFnbywgaW4gdGhlIHN1bW1lci4gSXQgd2FzIG15IGZpcnN0IGJpZyB0cmlwIGluIENhbmFkYSwgYW5kIEkgd2VudCB0aGVyZSB3aXRoIHR3byBmcmllbmRzIGJ5IGJ1cyBmcm9tIFRvcm9udG8uIFdoZW4gd2UgYXJyaXZlZCwgSSBoZWFyZCB0aGUgZmFsbHMgYmVmb3JlIEkgc2F3IHRoZW0gXHUyMDE0IGEgZGVlcCwgcG93ZXJmdWwgc291bmQsIGxpa2UgZW5kbGVzcyB0aHVuZGVyLiBUaGVuIHdlIHdhbGtlZCB0byB0aGUgZWRnZSwgYW5kIEkganVzdCBzdG9vZCB0aGVyZSB3aXRoIG15IG1vdXRoIG9wZW4uIFNvIG11Y2ggd2F0ZXIsIGZhbGxpbmcgZXZlcnkgc2Vjb25kLCB3aXRoIGEgaHVnZSBjbG91ZCBvZiB3aGl0ZSBtaXN0IGFib3ZlIGl0LiBXZSBkaWQgdGhlIGZhbW91cyBib2F0IHRvdXIsIGFuZCB0aGUgYm9hdCB0b29rIHVzIHZlcnkgY2xvc2UgdG8gdGhlIGZhbGxzLiBFdmVyeW9uZSB3b3JlIHJlZCByYWluIHBvbmNob3MsIGFuZCB3ZSBzdGlsbCBnb3QgY29tcGxldGVseSB3ZXQhIFRoZSBtaXN0IHdhcyBjb2xkIG9uIG15IGZhY2UsIGFuZCB0aGVyZSB3YXMgYSBiZWF1dGlmdWwgcmFpbmJvdyByaWdodCBvdmVyIHRoZSB3YXRlci4gSW4gdGhlIGV2ZW5pbmcsIGNvbG91cmZ1bCBsaWdodHMgc2hvbmUgb24gdGhlIGZhbGxzIFx1MjAxNCBwaW5rLCBibHVlLCBncmVlbiBcdTIwMTQgYW5kIGl0IGxvb2tlZCBsaWtlIG1hZ2ljLiBXaGF0IG1hZGUgaXQgbWVtb3JhYmxlIHdhcyB0aGUgZmVlbGluZyBvZiBiZWluZyBzbyBzbWFsbCBuZXh0IHRvIHNvbWV0aGluZyBzbyBwb3dlcmZ1bC4gSSB0b29rIGEgaHVuZHJlZCBwaG90b3MsIGJ1dCBob25lc3RseSwgbm8gcGhvdG8gY2FuIHNob3cgdGhlIHJlYWwgdGhpbmcuIEkgd2FudCB0byBnbyBiYWNrIGFnYWluIHdpdGggbXkgZmFtaWx5LiIsInM5IjoiSSdkIGxpa2UgdG8gdGVsbCB5b3UgYWJvdXQgdmlzaXRpbmcgTmlhZ2FyYSBGYWxscyB0aHJlZSBzdW1tZXJzIGFnbyBcdTIwMTQgYSBwbGFjZSBzbyBmYW1vdXMgSSBhc3N1bWVkIGl0IGNvdWxkbid0IHN1cnByaXNlIG1lLCBhbmQgSSd2ZSBuZXZlciBiZWVuIG1vcmUgd3JvbmcuIFR3byBmcmllbmRzIGFuZCBJIHRvb2sgdGhlIGJ1cyBmcm9tIFRvcm9udG8sIGFuZCBteSBmaXJzdCBtZW1vcnkgaXNuJ3QgdmlzdWFsIGF0IGFsbDogaXQncyB0aGUgc291bmQuIFlvdSBoZWFyIHRoZSBmYWxscyBibG9ja3MgYmVmb3JlIHlvdSBzZWUgdGhlbSBcdTIwMTQgYSBkZWVwLCBjb250aW51b3VzIHRodW5kZXIgdGhhdCB5b3UgZmVlbCBpbiB5b3VyIGNoZXN0LiBUaGVuIHdlIHR1cm5lZCB0aGUgY29ybmVyIG9udG8gdGhlIHByb21lbmFkZSwgYW5kIHRoZXJlIGl0IHdhczogYW4gZW50aXJlIHJpdmVyIHNpbXBseSBzdGVwcGluZyBvZmYgYSBjbGlmZiwgd2l0aCBhIHBlcm1hbmVudCB0b3dlciBvZiB3aGl0ZSBtaXN0IHJpc2luZyBhYm92ZSB0aGUgaG9yc2VzaG9lLiBUaGUgY2VudHJlcGllY2Ugb2YgdGhlIGRheSB3YXMgdGhlIGJvYXQgY3J1aXNlIHRoYXQgc2FpbHMgcHJhY3RpY2FsbHkgaW50byB0aGUgY3VydGFpbiBvZiB0aGUgZmFsbHMuIFRoZXkgaGFuZCBldmVyeW9uZSB0aGluIHJlZCBwb25jaG9zLCB3aGljaCB0dXJuIG91dCB0byBiZSBtb3JlIG9mIGEgcG9saXRlIGdlc3R1cmUgdGhhbiBhY3R1YWwgcHJvdGVjdGlvbiBcdTIwMTQgd2l0aGluIG1pbnV0ZXMgd2Ugd2VyZSBzb2FrZWQsIGxhdWdoaW5nLCBoYWxmLWJsaW5kZWQgYnkgc3ByYXksIHdoaWxlIHRoZSBib2F0IHJvY2tlZCBpbiB0aGUgY2h1cm5pbmcgd2F0ZXIgYmVsb3cgbWlsbGlvbnMgb2YgbGl0cmVzIGZhbGxpbmcgcGVyIHNlY29uZC4gQXQgb25lIHBvaW50IGEgcmFpbmJvdyBhcmNoZWQgZGlyZWN0bHkgb3ZlciB1cywgYW5kIHRoZSB3aG9sZSBib2F0IGdhc3BlZCBpbiB1bmlzb24uIFdlIHN0YXllZCBmb3IgdGhlIGV2ZW5pbmcgaWxsdW1pbmF0aW9uIHRvbywgd2hlbiBjb2xvdXJlZCBsaWdodHMgdHVybiB0aGUgZmFsbHMgcGluaywgYmx1ZSBhbmQgZ3JlZW4gYWdhaW5zdCB0aGUgbmlnaHQgc2t5IFx1MjAxNCBjb21wbGV0ZWx5IGRpZmZlcmVudCBtb29kLCBlcXVhbGx5IHVuZm9yZ2V0dGFibGUuIFdoYXQgbWFkZSB0aGUgZXhwZXJpZW5jZSBzdGljayB3aXRoIG1lIHdhcyB0aGUgc2hlZXIgc2NhbGUgXHUyMDE0IHRoYXQgaHVtYmxpbmcgZmVlbGluZyBvZiBzdGFuZGluZyBuZXh0IHRvIHNvbWV0aGluZyBhbmNpZW50LCBpbmRpZmZlcmVudCBhbmQgbWFnbmlmaWNlbnQuIE15IHBob25lIGlzIGZ1bGwgb2YgcGhvdG9zIGZyb20gdGhhdCBkYXksIGFuZCBub3Qgb25lIG9mIHRoZW0gY29tZXMgY2xvc2UuIFNvbWUgcGxhY2VzIHJlYWxseSBkbyBoYXZlIHRvIGJlIGZlbHQgaW4gcGVyc29uLCBhbmQgTmlhZ2FyYSBpcyBhdCB0aGUgdG9wIG9mIHRoYXQgbGlzdC4ifSx7ImsiOiJ0MyIsIm51bSI6MywidHlwZUVuIjoiRGVzY3JpYmluZyBhIFNjZW5lIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IkRlc2NyaWJlIHNvbWUgdGhpbmdzIHRoYXQgYXJlIGhhcHBlbmluZyBpbiB0aGUgcGljdHVyZSBiZWxvdyBhcyB3ZWxsIGFzIHlvdSBjYW4uIFRoZSBwZXJzb24gd2l0aCB3aG9tIHlvdSBhcmUgc3BlYWtpbmcgY2Fubm90IHNlZSB0aGUgcGljdHVyZS4iLCJpbWciOiJzY2VuZSIsInRpcHMiOnsiYnVsbGV0cyI6WyJGaXJzdCBzZW50ZW5jZTogZ2l2ZSB0aGUgb3ZlcnZpZXcgKHdoZXJlIGl0IGlzLCB3aGF0IHRoZSBhdG1vc3BoZXJlIGlzIGxpa2UpLiIsIkRlc2NyaWJlIDRcdTIwMTM2IGRldGFpbHMgYnkgbG9jYXRpb246IGluIHRoZSBmb3JlZ3JvdW5kIC8gb24gdGhlIGxlZnQgLyBhdCB0aGUgYmFja1x1MjAyNjsgdXNlIHRoZSBwcmVzZW50IGNvbnRpbnVvdXMuIiwiVGhlIGxpc3RlbmVyIENBTk5PVCBzZWUgdGhlIHBpY3R1cmUgXHUyMDE0IGJlIHNwZWNpZmljOyB3aGVuIHVuc3VyZSwgdXNlIHNlZW1zIC8gYXBwZWFycyAvIGxvb2tzIGxpa2UuIiwiQSBjaGlsZHJlbidzIGFjdGl2aXR5IHJvb20gaW4gYSBkaW5vc2F1ciBtdXNldW06IGdvIGluIG9yZGVyIC0gdGhlIGRpbm9zYXVyIHNrZWxldG9ucyB1cCBvbiB0aGUgY2VpbGluZyBhbmQgd2FsbCAoYSBmbHlpbmcgcHRlcm9kYWN0eWwgYW5kIGEgbG9uZy1uZWNrZWQgZGlub3NhdXIsIHBsdXMgYSBzcGlreSBkaW5vc2F1ciBtb2RlbCkgLT4gdGhlIGtpZHMgZG9pbmcgY3JhZnRzIGF0IHRoZSBncmVlbiB0YWJsZSB3aXRoIHBhaW50IHBvdHMgLT4gdGhlIGdpcmwgcGFpbnRpbmcgYSBkaW5vc2F1ciBwaWN0dXJlIGF0IHRoZSBlYXNlbCAtPiB0aGUgdHdvIGFkdWx0cyBvbiB0aGUgbGVmdCBoYW5naW5nIHVwIGNoaWxkcmVuJ3MgZHJhd2luZ3MgLT4gdGhlIGNoaWxkIHJlYWRpbmcgb24gdGhlIHB1cnBsZSBjb3VjaCBieSB0aGUgYm9va3NoZWxmIC0+IHRoZSB0d28ga2lkcyBwbGF5aW5nIHdpdGggZGlub3NhdXIgdG95cyBvbiB0aGUgcnVnIC0+IHRoZSBiaWcgd2luZG93IHdpdGggZ3JlZW4gaGlsbHMgb3V0c2lkZS4iXSwicGhyYXNlcyI6WyJJbiB0aGUgZm9yZWdyb3VuZCwgXHUyMDI2IiwiT24gdGhlIHJpZ2h0LWhhbmQgc2lkZSwgXHUyMDI2IiwiSXQgbG9va3MgbGlrZVx1MjAyNiIsIlRoZSB3aG9sZSBwbGFjZSBmZWVsc1x1MjAyNiJdfSwiczYiOiJUaGlzIHBpY3R1cmUgc2hvd3MgYSBmdW4gY2hpbGRyZW4ncyByb29tIGluc2lkZSBhIGRpbm9zYXVyIG11c2V1bS4gVGhlIGJlc3QgcGFydCBpcyBhdCB0aGUgdG9wOiByZWFsIGRpbm9zYXVyIHNrZWxldG9ucyEgQSBmbHlpbmcgZGlub3NhdXIsIGEgcHRlcm9kYWN0eWwsIGhhbmdzIGZyb20gdGhlIGNlaWxpbmcsIGFuZCB0aGVyZSBpcyBhIHZlcnkgbG9uZyBkaW5vc2F1ciBza2VsZXRvbiB3aXRoIGEgbG9uZyBuZWNrIHVwIG9uIHRoZSB3YWxsLiBPbiB0aGUgcmlnaHQgY29ybmVyLCBJIGNhbiBhbHNvIHNlZSBhIHNwaWt5IGRpbm9zYXVyIG1vZGVsLiBCZWxvdywgdGhlIHJvb20gaXMgZnVsbCBvZiBidXN5IGNoaWxkcmVuLiBJbiB0aGUgbWlkZGxlLCBzb21lIGtpZHMgYXJlIHNpdHRpbmcgYXQgYSBiaWcgZ3JlZW4gdGFibGUsIGRvaW5nIGNyYWZ0cyB3aXRoIHJlZCBhbmQgeWVsbG93IHBhaW50IHBvdHMgXHUyMDE0IEkgdGhpbmsgdGhleSBhcmUgbWFraW5nIGRpbm9zYXVyIGFydC4gT24gdGhlIHJpZ2h0LCBhIGdpcmwgaXMgc3RhbmRpbmcgYXQgYW4gZWFzZWwgYW5kIHBhaW50aW5nIGEgcGljdHVyZSBvZiBhIGdyZWVuIGRpbm9zYXVyLiBPbiB0aGUgbGVmdCBzaWRlLCB0d28gYWR1bHRzLCBtYXliZSBhIHRlYWNoZXIgYW5kIGEgcGFyZW50LCBhcmUgaGFuZ2luZyBjaGlsZHJlbidzIGNvbG91cmZ1bCBkcmF3aW5ncyBvbiB0aGUgd2FsbCwgbmV4dCB0byBzb21lIHNtYWxsIGZsYWdzLiBCZWhpbmQgdGhlbSwgb25lIGNoaWxkIGlzIHNpdHRpbmcgb24gYSBwdXJwbGUgY291Y2ggYW5kIHJlYWRpbmcgYSBib29rLCBuZWFyIGEgYmlnIGJvb2tzaGVsZiBmdWxsIG9mIGJvb2tzLiBJbiB0aGUgZnJvbnQsIHR3byBraWRzIGFyZSBwbGF5aW5nIHdpdGggdG95IGRpbm9zYXVycyBvbiBhIHJ1Zy4gVGhyb3VnaCB0aGUgYmlnIHdpbmRvdywgSSBjYW4gc2VlIGdyZWVuIGhpbGxzIG91dHNpZGUuIEl0IGlzIGEgcGVyZmVjdCBwbGFjZSBmb3IgY2hpbGRyZW4gd2hvIGxvdmUgZGlub3NhdXJzLiIsInM5IjoiVGhpcyBpcyBhIHdvbmRlcmZ1bGx5IGJ1c3kgY2hpbGRyZW4ncyBhY3Rpdml0eSByb29tIGluc2lkZSB3aGF0IGlzIGNsZWFybHkgYSBkaW5vc2F1ciBtdXNldW0gXHUyMDE0IHRoZSBldmlkZW5jZSBpcyBoYW5naW5nIHJpZ2h0IG92ZXJoZWFkLiBBIHB0ZXJvZGFjdHlsIHNrZWxldG9uIHNvYXJzIGZyb20gdGhlIGNlaWxpbmcgd2l0aCBpdHMgd2luZ3Mgc3ByZWFkLCBhIGxvbmctbmVja2VkIGRpbm9zYXVyIHNrZWxldG9uIHN0cmV0Y2hlcyBhbG9uZyB0aGUgdG9wIG9mIHRoZSB3YWxsLCBhbmQgYSBzcGlreSBhcm1vdXJlZCBkaW5vc2F1ciBtb2RlbCBwZWVrcyBvdmVyIHRoZSBwYXJ0aXRpb24gaW4gdGhlIGNvcm5lciBcdTIwMTQgdGhlIGtpbmQgb2YgZGV0YWlscyB0aGF0IG1ha2Uga2lkcyBuZXZlciB3YW50IHRvIGxlYXZlLiBEb3duIGF0IGZsb29yIGxldmVsLCB0aGUgcm9vbSBpcyBpbiBmdWxsIGNyZWF0aXZlIHByb2R1Y3Rpb24uIEF0IGEgYmlnIGdyZWVuIHRhYmxlIGluIHRoZSBjZW50cmUsIGEgZ3JvdXAgb2YgY2hpbGRyZW4gaXMgZWxib3ctZGVlcCBpbiBjcmFmdHdvcmssIHdpdGggcG90cyBvZiByZWQgYW5kIHllbGxvdyBwYWludCBhbmQgd2hhdCBsb29rIGxpa2UgZGlub3NhdXIgbW9kZWxzIGluIHByb2dyZXNzLiBUbyB0aGUgcmlnaHQsIGEgZ2lybCBpbiBhbiBhcHJvbiBzdGFuZHMgYXQgYW4gZWFzZWwsIGNvbmNlbnRyYXRpbmcgaGFyZCBvbiBoZXIgcGFpbnRpbmcgb2YgYSBncmVlbiBkaW5vc2F1ci4gVGhlIGxlZnQgc2lkZSBpcyB0aGUgZ2FsbGVyeSBkZXBhcnRtZW50OiB0d28gYWR1bHRzIFx1MjAxNCBhIG1hbiBpbiBibHVlIGFuZCBhIHdvbWFuIGluIHllbGxvdyBcdTIwMTQgYXJlIHBpbm5pbmcgdXAgdGhlIGNoaWxkcmVuJ3MgZmluaXNoZWQgZHJhd2luZ3MgYWxvbmdzaWRlIGEgc3RyaW5nIG9mIGxpdHRsZSBidW50aW5nIGZsYWdzLCB0dXJuaW5nIHRoZSB3YWxsIGludG8gYW4gZXhoaWJpdGlvbi4gQmVoaW5kIHRoZW0sIG9uZSBxdWlldCBjaGlsZCBoYXMgZXNjYXBlZCB0aGUgY2hhb3MgZW50aXJlbHksIGN1cmxlZCB1cCBvbiBhIHB1cnBsZSBjb3VjaCB3aXRoIGEgYm9vayBiZXNpZGUgYSB3ZWxsLXN0b2NrZWQgYm9va3NoZWxmLiBBbmQgaW4gdGhlIGZvcmVncm91bmQsIHR3byB5b3VuZ2VyIGtpZHMgYXJlIHNwcmF3bGVkIG9uIGEgcnVnLCBkZWVwIGluIGFuIGltYWdpbmFyeSBiYXR0bGUgYmV0d2VlbiB0aGVpciB0b3kgZGlub3NhdXJzLiBUaHJvdWdoIHRoZSBiaWcgd2luZG93LCBncmVlbiBoaWxscyByb2xsIGF3YXkgaW4gdGhlIHN1bnNoaW5lLiBUaGUgd2hvbGUgcm9vbSBodW1zIHdpdGggdGhhdCBoYXBweSBtdXNldW0td29ya3Nob3AgZW5lcmd5IFx1MjAxNCBlZHVjYXRpb24gZGlzZ3Vpc2VkIGFzIHBsYXksIHdpdGggc2tlbGV0b25zIHN1cGVydmlzaW5nIGZyb20gYWJvdmUuIn0seyJrIjoidDQiLCJudW0iOjQsInR5cGVFbiI6Ik1ha2luZyBQcmVkaWN0aW9ucyIsInByZXAiOjMwLCJyZWMiOjYwLCJwcm9tcHQiOiJJbiB0aGlzIHBpY3R1cmUsIHdoYXQgZG8geW91IHRoaW5rIHdpbGwgbW9zdCBwcm9iYWJseSBoYXBwZW4gbmV4dD8iLCJpbWciOiJzY2VuZSIsInRpcHMiOnsiYnVsbGV0cyI6WyJFYWNoIHByZWRpY3Rpb24gPSB3aWxsIC8gYmUgZ29pbmcgdG8gLyB3aWxsIHByb2JhYmx5ICsgYSBSRUFTT04gYmFzZWQgb24gYSBkZXRhaWwgaW4gdGhlIHBpY3R1cmUuIiwiTWFrZSAzXHUyMDEzNCBwcmVkaWN0aW9ucyBhYm91dCBkaWZmZXJlbnQgcGVvcGxlIFx1MjAxNCBkb24ndCBzdG9wIGF0IG9uZSBpZGVhLiIsIkZpbmlzaCB3aXRoIG9uZSBvdmVyYWxsIHByZWRpY3Rpb24gZm9yIHRoZSB3aG9sZSBzY2VuZS4iLCJTYW1lIG11c2V1bSByb29tIGFzIFRhc2sgMyAtIG5vdyBwcmVkaWN0OiB0aGUga2lkcyB3aWxsIGZpbmlzaCB0aGVpciBjcmFmdHMgYW5kIHRoZSBhZHVsdHMgd2lsbCBoYW5nIHRoZW0gb24gdGhlIHdhbGwsIHRoZSBnaXJsIHdpbGwgY29tcGxldGUgaGVyIGRpbm9zYXVyIHBhaW50aW5nIGFuZCBzaG93IGl0IHByb3VkbHksIHNvbWVib2R5IHdpbGwga25vY2sgb3ZlciBhIHBhaW50IHBvdCwgdGhlIHRlYWNoZXIgd2lsbCBnYXRoZXIgZXZlcnlvbmUgZm9yIHRoZSBuZXh0IGFjdGl2aXR5IChtYXliZSBhIHRvdXIgdG8gc2VlIHRoZSByZWFsIHNrZWxldG9ucyksIGFuZCB0aGUgdG95LWRpbm9zYXVyIGJhdHRsZSBvbiB0aGUgcnVnIHdpbGwgZ2V0IGxvdWRlci4iXSwicGhyYXNlcyI6WyJcdTIwMjZpcyBhYm91dCB0b1x1MjAyNiIsIkhlJ2xsIG1vc3QgbGlrZWx5XHUyMDI2IiwiSnVkZ2luZyBieVx1MjAyNiwgSSBleHBlY3RcdTIwMjYiLCJXaXRoaW4gbWludXRlcywgXHUyMDI2Il19LCJzNiI6IkkgdGhpbmsgdGhlIG5leHQgbWludXRlcyBpbiB0aGlzIG11c2V1bSByb29tIHdpbGwgYmUgYnVzeSBhbmQgYSBsaXR0bGUgbWVzc3kuIEZpcnN0LCB0aGUgY2hpbGRyZW4gYXQgdGhlIGdyZWVuIHRhYmxlIHdpbGwgZmluaXNoIHRoZWlyIGRpbm9zYXVyIGNyYWZ0cywgYW5kIHRoZXkgd2lsbCBydW4gdG8gdGhlIGFkdWx0cywgc2hvdXRpbmcgbG9vayBhdCBtaW5lISBUaGUgdGVhY2hlciB3aWxsIGhhbmcgdGhlIG5ldyBhcnR3b3JrcyBvbiB0aGUgd2FsbCwgbmV4dCB0byB0aGUgb3RoZXIgZHJhd2luZ3MuIFRoZSBnaXJsIGF0IHRoZSBlYXNlbCB3aWxsIGZpbmlzaCBoZXIgZ3JlZW4gZGlub3NhdXIgcGFpbnRpbmcsIGFuZCBzaGUgd2lsbCBiZSB2ZXJ5IHByb3VkIG9mIGl0LiBCdXQgSSBhbHNvIHByZWRpY3QgYSBzbWFsbCBhY2NpZGVudDogd2l0aCBzbyBtYW55IGtpZHMgYW5kIHBhaW50IHBvdHMgb24gb25lIHRhYmxlLCBzb21lYm9keSB3aWxsIGtub2NrIG92ZXIgdGhlIHJlZCBwYWludCwgYW5kIHRoZSB0ZWFjaGVyIHdpbGwgcXVpY2tseSBjbGVhbiBpdCB3aXRoIHBhcGVyIHRvd2Vscy4gVGhlIHR3byBib3lzIHBsYXlpbmcgd2l0aCBkaW5vc2F1ciB0b3lzIG9uIHRoZSBydWcgd2lsbCBnZXQgbG91ZGVyIGFuZCBsb3VkZXIgXHUyMDE0IHJvYXIsIHJvYXIhIFx1MjAxNCB1bnRpbCB0aGUgdGVhY2hlciBhc2tzIHRoZW0gdG8gcGxheSBtb3JlIHF1aWV0bHkuIFRoZSBjaGlsZCBvbiB0aGUgcHVycGxlIGNvdWNoIHdpbGwga2VlcCByZWFkaW5nLCBub3Qgbm90aWNpbmcgYW55dGhpbmcuIFRoZW4sIEkgdGhpbmsgdGhlIHRlYWNoZXIgd2lsbCBjbGFwIGhlciBoYW5kcyBhbmQgc2F5OiB0aW1lIGZvciB0aGUgbXVzZXVtIHRvdXIhIEFuZCBhbGwgdGhlIGNoaWxkcmVuIHdpbGwgbGluZSB1cCwgZXhjaXRlZCB0byBzZWUgdGhlIHJlYWwgZGlub3NhdXIgc2tlbGV0b25zIGluIHRoZSBiaWcgaGFsbC4gSXQgd2lsbCBiZSB0aGUgYmVzdCBwYXJ0IG9mIHRoZWlyIGRheS4iLCJzOSI6IlRoZSBuZXh0IHNjZW5lIGluIHRoaXMgcm9vbSBwcmFjdGljYWxseSB3cml0ZXMgaXRzZWxmLiBUaGUgY3JhZnQgdGFibGUgd2lsbCByZWFjaCBpdHMgZ3JhbmQgZmluYWxlOiB0aGUga2lkcyB3aWxsIGZpbmlzaCB0aGVpciBkaW5vc2F1ciBjcmVhdGlvbnMgbW9yZSBvciBsZXNzIHNpbXVsdGFuZW91c2x5IGFuZCBzdGFtcGVkZSB0b3dhcmQgdGhlIGFkdWx0cywgZWFjaCBkZW1hbmRpbmcgaW1tZWRpYXRlIGV4aGliaXRpb24gb2YgdGhlaXIgbWFzdGVycGllY2UgXHUyMDE0IGFuZCB0aGUgdHdvIGFkdWx0cyBvbiB0aGUgbGVmdCB3aWxsIGR1dGlmdWxseSBleHBhbmQgdGhlIHdhbGwgZ2FsbGVyeSwgZGlwbG9tYXRpY2FsbHkgZGVjbGFyaW5nIGV2ZXJ5IHNpbmdsZSBvbmUgYW1hemluZy4gVGhlIGdpcmwgYXQgdGhlIGVhc2VsIHdpbGwgYWRkIGEgZmluYWwgc3Ryb2tlIHRvIGhlciBncmVlbiBkaW5vc2F1ciwgc3RlcCBiYWNrLCBhbmQgZ2xvdyB3aXRoIHRoZSBwYXJ0aWN1bGFyIHByaWRlIG9mIGEgc2l4LXllYXItb2xkIGFydGlzdDsgaGVyIHBhaW50aW5nIGlzIGRlZmluaXRlbHkgZ29pbmcgb24gdGhlIGZyaWRnZSBhdCBob21lLCBtdXNldW0gd2FsbCBvciBub3QuIFN0YXRpc3RpY2FsbHksIHdpdGggdGhhdCBtYW55IHNtYWxsIGVsYm93cyBhcm91bmQgb3BlbiBwYWludCBwb3RzLCBhIHNwaWxsIGlzIG5vdCBhIHBvc3NpYmlsaXR5IGJ1dCBhIGNlcnRhaW50eSBcdTIwMTQgbXkgbW9uZXkgaXMgb24gdGhlIHJlZCBwYWludCwgZm9sbG93ZWQgYnkgYSBoZXJvaWMgdGVhY2hlciBpbnRlcnZlbnRpb24gd2l0aCBwYXBlciB0b3dlbHMgYmVmb3JlIGl0IHJlYWNoZXMgdGhlIHJ1Zy4gU3BlYWtpbmcgb2YgdGhlIHJ1ZywgdGhlIHRveSBkaW5vc2F1ciBiYXR0bGUgZG93biBpbiBmcm9udCBpcyBjbGVhcmx5IGVzY2FsYXRpbmc7IHRoZSByb2FyaW5nIHdpbGwgZ3JvdyB1bnRpbCBhbiBhZHVsdCBuZWdvdGlhdGVzIGEgY2Vhc2VmaXJlLiBUaGUgYm9va3dvcm0gb24gdGhlIHB1cnBsZSBjb3VjaCB3aWxsIHJlbWFpbiBtYWduaWZpY2VudGx5IG9ibGl2aW91cyB0aHJvdWdob3V0LCBwb3NzaWJseSB0aGUgb25seSBjaGlsZCBpbiBoaXN0b3J5IHRvIGlnbm9yZSBib3RoIGEgcGFpbnQgc3BpbGwgYW5kIGEgZGlub3NhdXIgd2FyLiBBbmQgdGhlbiBjb21lcyB0aGUgbW9tZW50IHRoZXkndmUgYWxsIGJlZW4gd2FpdGluZyBmb3I6IHRoZSB0ZWFjaGVyIHdpbGwgY2xhcCBoZXIgaGFuZHMgYW5kIGFubm91bmNlIHRoZSB0b3VyIG9mIHRoZSByZWFsIHNrZWxldG9uIGhhbGwsIGFuZCB0aGlzIHdob2xlIGJ1c3kgcm9vbSB3aWxsIGVtcHR5IGluIHRlbiBzZWNvbmRzIGZsYXQsIGxlYXZpbmcganVzdCBkcnlpbmcgcGFpbnRpbmdzIGFuZCBvbmUgdmVyeSByZWxpZXZlZCBydWcuIEEgcGVyZmVjdCBtdXNldW0gbW9ybmluZy4ifSx7ImsiOiJ0NSIsIm51bSI6NSwidHlwZUVuIjoiQ29tcGFyaW5nIGFuZCBQZXJzdWFkaW5nIiwicGhhc2VkIjp0cnVlLCJjaG9vc2UiOnsicHJlcCI6NjAsInNpdHVhdGlvbiI6IllvdSB3b3JrIGF0IGEgY29tbXVuaXR5IGRldmVsb3BtZW50IG9mZmljZSwgYW5kIHlvdSBhcmUgaW4gY2hhcmdlIG9mIGNob29zaW5nIHBsYXlncm91bmQgZXF1aXBtZW50IGZvciBhIG5ldyBwYXJrLiBZb3UgZm91bmQgdHdvIHN1aXRhYmxlIG9wdGlvbnMuIFVzaW5nIHRoZSBwaWN0dXJlcyBhbmQgaW5mb3JtYXRpb24gYmVsb3csIGNob29zZSB0aGUgb3B0aW9uIHRoYXQgeW91IHByZWZlci4gSW4gdGhlIG5leHQgc2VjdGlvbiwgeW91IHdpbGwgbmVlZCB0byBwZXJzdWFkZSB5b3VyIGNvLXdvcmtlciB0aGF0IHlvdXIgY2hvaWNlIGlzIHRoZSBiZXR0ZXIgY2hvaWNlLiIsIm5vdGUiOiJJZiB5b3UgZG8gbm90IGNob29zZSBhbiBvcHRpb24sIHRoZSBjb21wdXRlciB3aWxsIGNob29zZSBvbmUgZm9yIHlvdS4gWW91IGRvIG5vdCBuZWVkIHRvIHNwZWFrIGZvciB0aGlzIHBhcnQuIiwib3B0aW9ucyI6W3sidGl0bGUiOiJBbGwtaW4tT25lIFBsYXlncm91bmQgU2V0IiwiaW1nIjoib3B0QSIsImJ1bGxldHMiOlsic3VpdGFibGUgZm9yIGFnZXMgNSB0byAxMiIsImEgZml4ZWQgZGVzaWduIG9mIHRocmVlIHNsaWRlcyBhbmQgY2xpbWJlcnMiLCJhY2NvbW1vZGF0ZXMgdXAgdG8gdHdlbnR5IGNoaWxkcmVuIGF0IGEgdGltZSJdfSx7InRpdGxlIjoiQ29tcG9uZW50IFBsYXlncm91bmQgU2V0IiwiaW1nIjoib3B0QiIsImJ1bGxldHMiOlsiZmxleGlibGUgYXJyYW5nZW1lbnQiLCJzdWl0YWJsZSBmb3IgYWdlcyAyIHRvIDgiLCJzbWFsbCBhbmQgbGFyZ2Ugc2l6ZXMgYXJlIGF2YWlsYWJsZSBmb3IgZWFjaCBjb21wb25lbnQiXX1dfSwic3BlYWsiOnsicHJlcCI6NjAsInJlYyI6NjAsInByb21wdCI6IllvdXIgY28td29ya2VyIGlzIHN1Z2dlc3RpbmcgYSBkaWZmZXJlbnQgb3B0aW9uIChzaG93biBiZWxvdykuIFBlcnN1YWRlIHlvdXIgY28td29ya2VyIHRoYXQgdGhlIG9wdGlvbiB5b3UgY2hvc2UgaXMgdGhlIGJldHRlciBjaG9pY2UgYnkgY29tcGFyaW5nIHRoZSB0d28uIiwib3RoZXJMYWJlbCI6IllvdXIgQ28tV29ya2VyJ3MgU3VnZ2VzdGlvbiIsIm90aGVyIjp7InRpdGxlIjoiQ2xhc3NpYyBTd2luZyBTZXQiLCJpbWciOiJvcHRPdGhlciIsImJ1bGxldHMiOlsiZWFzeSB0byBtYWludGFpbiIsInNpdHMgdXAgdG8gdHdvIHBlb3BsZSIsImNvbXBhcmF0aXZlbHkgaW5leHBlbnNpdmUiXX19LCJ0aXBzIjp7ImJ1bGxldHMiOlsiU3RydWN0dXJlOiBhY2tub3dsZWRnZSB0aGUgb3RoZXIgcGVyc29uJ3MgY2hvaWNlIFx1MjE5MiBnaXZlIDJcdTIwMTMzIGFkdmFudGFnZXMgb2YgeW91cnMgKGRpcmVjdCBjb21wYXJpc29uKSBcdTIxOTIgd3JhcCB1cC4iLCJDb21wYXJlIHVzaW5nIHRoZSBudW1iZXJzIG9uIHRoZSBjYXJkczogcHJpY2UsIGR1cmF0aW9uLCBjYXBhY2l0eSwgZXhwZXJpZW5jZS4iLCJZb3UgZG8gTk9UIG5lZWQgdG8gc3BlYWsgZHVyaW5nIHRoZSBjaG9vc2luZyBzdGVwIFx1MjAxNCBqdXN0IGNsaWNrIGFuIG9wdGlvbi4iLCJUaGUgc2FtcGxlcyBiZWxvdyBjaG9vc2UgdGhlIENvbXBvbmVudCBQbGF5Z3JvdW5kIFNldCAoZmxleGlibGUgYXJyYW5nZW1lbnQsIHNlcnZlcyB0b2RkbGVycyBmcm9tIGFnZSAyLCBwaWVjZXMgY2FuIGJlIGFkZGVkIG9yIHJlcGxhY2VkIG92ZXIgdGltZSkuIFRoZSBjby13b3JrZXIncyBzd2luZyBzZXQgaXMgY2hlYXAgYW5kIGVhc3kgdG8gbWFpbnRhaW4gYnV0IHNlYXRzIG9ubHkgVFdPIGNoaWxkcmVuIC0gdXNlbGVzcyBmb3IgYSB3aG9sZSBuZXcgcGFyay4gSWYgeW91IHByZWZlciB0aGUgQWxsLWluLU9uZSBzZXQsIHN0cmVzcyB0aGUgY2FwYWNpdHkgb2YgdHdlbnR5IGtpZHMgYXQgb25jZSBhbmQgdGhlIG9sZGVyIDUtMTIgYWdlIHJhbmdlLiJdLCJwaHJhc2VzIjpbIkkgc2VlIHdoeSB5b3UgbGlrZVx1MjAyNiwgYnV0XHUyMDI2IiwiQ29tcGFyZWQgdG9cdTIwMjYsIHRoaXMgb25lXHUyMDI2IiwiSXQncyBiZXR0ZXIgdmFsdWU6IFx1MjAyNiB2ZXJzdXMgXHUyMDI2IiwiSWYgdGhlIGdvYWwgaXNcdTIwMjYsIHRoZSBjaG9pY2UgaXMgY2xlYXIuIl19LCJzNiI6IkkgdW5kZXJzdGFuZCB3aHkgeW91IHN1Z2dlc3RlZCB0aGUgY2xhc3NpYyBzd2luZyBzZXQgXHUyMDE0IGl0IGlzIGNoZWFwIGFuZCBlYXN5IHRvIG1haW50YWluLCBhbmQgZXZlcnkgcGFyayBuZWVkcyBzd2luZ3MuIEJ1dCBwbGVhc2UgbG9vayBhdCB0aGUgbnVtYmVycyB3aXRoIG1lOiB0aGUgc3dpbmcgc2V0IHNpdHMgb25seSB0d28gY2hpbGRyZW4uIFR3byEgT3VyIG5ldyBwYXJrIHdpbGwgc2VydmUgaHVuZHJlZHMgb2YgZmFtaWxpZXMgaW4gdGhpcyBuZWlnaGJvdXJob29kLiBJbWFnaW5lIHR3ZW50eSBraWRzIHdhaXRpbmcgaW4gbGluZSBmb3IgdHdvIHN3aW5ncyBcdTIwMTQgdGhlcmUgd2lsbCBiZSB0ZWFycyBhbmQgZmlnaHRzIGV2ZXJ5IGRheS4gVGhhdCBpcyB3aHkgSSBiZWxpZXZlIHRoZSBjb21wb25lbnQgcGxheWdyb3VuZCBzZXQgaXMgdGhlIHJpZ2h0IGNob2ljZS4gRmlyc3QsIGl0IGlzIGZsZXhpYmxlLiBXZSBjYW4gYXJyYW5nZSB0aGUgcGllY2VzIFx1MjAxNCB0aGUgc2xpZGUsIHRoZSBzZWVzYXcsIHRoZSB0dW5uZWwsIHRoZSB0cmFtcG9saW5lLCB0aGUgc2FuZGJveCBcdTIwMTQgdG8gZml0IG91ciBwYXJrIHBlcmZlY3RseSwgYW5kIHdlIGNhbiBhbHdheXMgYWRkIG1vcmUgcGllY2VzIG5leHQgeWVhciB3aGVuIHdlIGhhdmUgbW9yZSBidWRnZXQuIFNlY29uZCwgaXQgc2VydmVzIGNoaWxkcmVuIGZyb20gYWdlIHR3byB0byBlaWdodCwgc28gZXZlbiB0aGUgc21hbGxlc3Qga2lkcyBnZXQgc29tZXRoaW5nIHNhZmUgdG8gcGxheSBvbi4gRmFtaWxpZXMgd2l0aCB0b2RkbGVycyBoYXZlIGFsbW9zdCBubyBwbGFjZXMgdG8gZ28gXHUyMDE0IHRoaXMgc2V0IHdlbGNvbWVzIHRoZW0uIFRoaXJkLCBlYWNoIGNvbXBvbmVudCBjb21lcyBpbiBzbWFsbCBhbmQgbGFyZ2Ugc2l6ZXMsIHNvIHdlIGNhbiBtaXggZm9yIGRpZmZlcmVudCBhZ2VzLiBBbmQgaGVyZSBpcyB0aGUgZ29vZCBuZXdzOiB3ZSBjYW4gaW5jbHVkZSBzd2luZ3MgYXMgb25lIG9mIHRoZSBjb21wb25lbnRzISBTbyB3ZSBnZXQgeW91ciBzd2luZ3MgQU5EIGV2ZXJ5dGhpbmcgZWxzZS4gTGV0J3MgY2hvb3NlIHRoZSBjb21wb25lbnQgc2V0IFx1MjAxNCBpdCBnaXZlcyB0aGUgbW9zdCBmdW4gdG8gdGhlIG1vc3QgY2hpbGRyZW4uIiwiczkiOiJJIHNlZSB0aGUgYXBwZWFsIG9mIHlvdXIgc3dpbmcgc2V0IHN1Z2dlc3Rpb24gXHUyMDE0IGl0J3MgaW5leHBlbnNpdmUsIG5lYXJseSBtYWludGVuYW5jZS1mcmVlLCBhbmQgdGhlcmUncyBzb21ldGhpbmcgY2xhc3NpYyBhYm91dCBzd2luZ3MgaW4gYSBwYXJrLiBCdXQgbGV0IG1lIHB1dCBvbmUgbnVtYmVyIG9uIHRoZSB0YWJsZTogaXQgc2VhdHMgdHdvIGNoaWxkcmVuLiBUd28uIFdlJ3JlIGJ1aWxkaW5nIHRoZSBvbmx5IG5ldyBwbGF5Z3JvdW5kIHRoaXMgbmVpZ2hib3VyaG9vZCBoYXMgc2VlbiBpbiBhIGRlY2FkZSwgZm9yIGEgY29tbXVuaXR5IHdpdGggaHVuZHJlZHMgb2YgeW91bmcgZmFtaWxpZXMuIElmIHdlIHNwZW5kIG91ciBidWRnZXQgb24gZXF1aXBtZW50IHdpdGggYSBjYXBhY2l0eSBvZiB0d28sIHdlJ3JlIG5vdCBidWlsZGluZyBhIHBsYXlncm91bmQgXHUyMDE0IHdlJ3JlIGJ1aWxkaW5nIGEgcXVldWUuIFRoYXQncyB3aHkgSSdtIGJhY2tpbmcgdGhlIGNvbXBvbmVudCBwbGF5Z3JvdW5kIHNldCwgYW5kIGhlcmUncyB0aGUgZnVsbCBjYXNlLiBGaXJzdCwgZmxleGliaWxpdHk6IGl0J3MgYSBtb2R1bGFyIHN5c3RlbSBcdTIwMTQgc2xpZGVzLCBzZWVzYXcsIGNsaW1iaW5nIGZyYW1lcywgdHVubmVsLCB0cmFtcG9saW5lLCBzYW5kYm94LCBldmVuIHN3aW5ncyBcdTIwMTQgdGhhdCB3ZSBjYW4gYXJyYW5nZSB0byBmaXQgb3VyIHNwZWNpZmljIHNpdGUsIHNwcmVhZGluZyBwbGF5IHpvbmVzIGFwYXJ0IHNvIHRoZSBzcGFjZSBicmVhdGhlcy4gU2Vjb25kLCBpbmNsdXNpdmVuZXNzOiBpdCdzIHJhdGVkIGZvciBhZ2VzIHR3byB0byBlaWdodCwgYW5kIHRoYXQgbG93ZXIgYm91bmQgbWF0dGVycyBlbm9ybW91c2x5LiBUb2RkbGVyLWZyaWVuZGx5IGVxdWlwbWVudCBpcyB0aGUgc2luZ2xlIGJpZ2dlc3QgZ2FwIGluIG91ciBjaXR5J3MgcGFya3M7IHRoaXMgc2V0IGdpdmVzIHRoZSB5b3VuZ2VzdCBmYW1pbGllcyBhIHJlYXNvbiB0byBjb21lLCB3aGlsZSBlYWNoIGNvbXBvbmVudCdzIHNtYWxsIGFuZCBsYXJnZSBzaXplIG9wdGlvbnMgbGV0IHVzIHNlcnZlIHRoZSByYW5nZSB3aXRoaW4gdGhhdCBncm91cC4gVGhpcmQsIGl0J3MgZnV0dXJlLXByb29mOiB3aGVuIGEgcGllY2Ugd2VhcnMgb3V0LCB3ZSByZXBsYWNlIHRoYXQgcGllY2UsIG5vdCB0aGUgd2hvbGUgc3RydWN0dXJlIFx1MjAxNCBhbmQgd2hlbiBuZXh0IHllYXIncyBidWRnZXQgYXJyaXZlcywgd2Ugc2ltcGx5IGFkZCBjb21wb25lbnRzLiBUaGUgYWxsLWluLW9uZSB0b3dlciB3YXMgbXkgc2Vjb25kIGNob2ljZSBcdTIwMTQgZ3JlYXQgY2FwYWNpdHksIGJ1dCBpdCdzIGEgZml4ZWQgZGVzaWduIGFuZCBzdGFydHMgYXQgYWdlIGZpdmUuIEFuZCB5b3VyIHN3aW5ncz8gVGhleSdyZSBsaXRlcmFsbHkgYXZhaWxhYmxlIGFzIGEgY29tcG9uZW50LCBzbyB3ZSBjYW4gaW5jbHVkZSB0aGVtLiBUaGUgY29tcG9uZW50IHNldCBpc24ndCB0aGUgY2hlYXBlc3Qgb3B0aW9uIHRvZGF5LCBidXQgaXQncyB0aGUgYmVzdCBwbGF5Z3JvdW5kIHBlciBkb2xsYXIgb3ZlciB0aGUgbmV4dCBmaWZ0ZWVuIHllYXJzLiBMZXQncyBidWlsZCBmb3IgdGhlIHdob2xlIGNvbW11bml0eSwgbm90IGp1c3QgdGhlIGZpcnN0IHR3byBraWRzIGluIGxpbmUuIn0seyJrIjoidDYiLCJudW0iOjYsInR5cGVFbiI6IkRlYWxpbmcgd2l0aCBhIERpZmZpY3VsdCBTaXR1YXRpb24iLCJwcmVwIjo2MCwicmVjIjo2MCwicHJvbXB0IjoiWW91ciBib3NzIGhpcmVkIGEgbmV3IGVtcGxveWVlLCBBbGlzdGFpciwgYW5kIGFza2VkIHlvdSBhbmQgeW91ciBjby13b3JrZXJzLCBFdW4tSnVuZyBhbmQgQ2h1bmksIHRvIHRyYWluIGhpbS4gQWZ0ZXIgb25lIG1vbnRoLCBBbGlzdGFpciBrZWVwcyBtYWtpbmcgbWlzdGFrZXMgYW5kIGlzIG5vdCBsaXN0ZW5pbmcgdG8geW91ciBmZWVkYmFjay4gRXVuLUp1bmcgdGhpbmtzIHRoYXQgeW91IHNob3VsZCBleHBsYWluIHRvIHlvdXIgYm9zcyB3aHkgQWxpc3RhaXIgc2hvdWxkIGJlIGZpcmVkLiBDaHVuaSB0aGlua3MgdGhhdCB5b3Ugc2hvdWxkIHRyeSB0YWxraW5nIHRvIEFsaXN0YWlyIGFnYWluIGFuZCB0ZWxsIGhpbSB3aHkgaGUgbmVlZHMgdG8gZG8gYmV0dGVyLiIsImNob29zZU9uZSI6WyJUYWxrIHRvIEV1bi1KdW5nLiBFeHBsYWluIHdoeSB5b3Ugc2hvdWxkIHRhbGsgdG8gQWxpc3RhaXIgb25lIG1vcmUgdGltZS4iLCJUYWxrIHRvIENodW5pLiBFeHBsYWluIHdoeSBBbGlzdGFpciBuZWVkcyB0byBiZSBmaXJlZC4iXSwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiUGljayBPTkUgb3B0aW9uIChFSVRIRVIgb3IgT1IpIGltbWVkaWF0ZWx5IFx1MjAxNCBkb24ndCB3YXN0ZSB0aW1lIGRlY2lkaW5nLiIsIlN0cnVjdHVyZTogb3BlbiBwb2xpdGVseSBcdTIxOTIgZXhwbGFpbiB5b3VyIHJlYXNvbnMvZXZpZGVuY2UgXHUyMTkyIHByb3Bvc2UgYSBzb2x1dGlvbiBcdTIxOTIgc21vb3RoIHRoaW5ncyBvdmVyLiIsIlN0YXkgY2FsbSBhbmQgcmVzcGVjdGZ1bCBcdTIwMTQgaG93IHlvdSBoYW5kbGUgdGhlIHNpdHVhdGlvbiBpcyBwYXJ0IG9mIHdoYXQncyBiZWluZyByYXRlZCAoTGlzdGVuYWJpbGl0eSkuIiwiVGhlIHNhbXBsZXMgY2hvb3NlIG9wdGlvbiAxIChwZXJzdWFkZSBFdW4tSnVuZyB0byBnaXZlIEFsaXN0YWlyIG9uZSBtb3JlIGNoYW5jZSkuIEtleSBsb2dpYzogb25lIG1vbnRoIGlzIGEgc2hvcnQgcnVud2F5LCBmaXJpbmcgYW5kIHJlaGlyaW5nIGNvc3RzIHRoZSB0ZWFtIG1vcmUgdHJhaW5pbmcgdGltZSwgYW5kIG1heWJlIHRoZSBmZWVkYmFjayBzdHlsZSAtIG5vdCB0aGUgcGVyc29uIC0gaXMgdGhlIHByb2JsZW0uIFByb3Bvc2Ugc29tZXRoaW5nIGNvbmNyZXRlOiBvbmUgaG9uZXN0IHNpdC1kb3duLCBhIHdyaXR0ZW4gY2hlY2tsaXN0LCB3ZWVrbHkgbWluaS1yZXZpZXdzLCBhbmQgYSBjbGVhciB0d28td2VlayBkZWFkbGluZSBiZWZvcmUgZXNjYWxhdGluZyB0byB0aGUgYm9zcy4iXSwicGhyYXNlcyI6WyJDb3VsZCBJIGp1bXAgaW4gZm9yIGEgbW9tZW50PyIsIkkgdW5kZXJzdGFuZCB5b3VyIGNvbmNlcm4sIGJ1dFx1MjAyNiIsIkhvdyBhYm91dCB3ZVx1MjAyNj8iLCJJJ2xsIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoaXMuIl19LCJzNiI6IkV1bi1KdW5nLCBJIGhlYXIgeW91LCBhbmQgSSB1bmRlcnN0YW5kIHlvdXIgZnJ1c3RyYXRpb24gXHUyMDE0IHRyYWluaW5nIEFsaXN0YWlyIGhhcyBiZWVuIGhhcmQgZm9yIGFsbCB0aHJlZSBvZiB1cywgYW5kIGhpcyBtaXN0YWtlcyBtYWtlIG91ciBvd24gd29yayBzbG93ZXIuIEJ1dCBiZWZvcmUgd2UgZ28gdG8gdGhlIGJvc3MgYW5kIGFzayB0byBmaXJlIGhpbSwgcGxlYXNlIGxpc3RlbiB0byBteSBpZGVhLiBGaXJzdCwgb25lIG1vbnRoIGlzIHJlYWxseSBzaG9ydC4gUmVtZW1iZXIgeW91ciBvd24gZmlyc3QgbW9udGggaGVyZT8gSSBtYWRlIHNvIG1hbnkgbWlzdGFrZXMgaW4gbWluZSEgU29tZSBwZW9wbGUgbmVlZCBlaWdodCB3ZWVrcyB0byBmZWVsIGNvbmZpZGVudCwgZXNwZWNpYWxseSB3aGVuIHRocmVlIGRpZmZlcmVudCB0cmFpbmVycyBnaXZlIHRoZW0gdGhyZWUgZGlmZmVyZW50IGluc3RydWN0aW9ucyBcdTIwMTQgbWF5YmUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBwcm9ibGVtLiBTZWNvbmQsIHRoaW5rIGFib3V0IHdoYXQgZmlyaW5nIG1lYW5zOiB0aGUgYm9zcyBzdGFydHMgaGlyaW5nIGFnYWluLCBpbnRlcnZpZXdzIHRha2Ugd2Vla3MsIGFuZCB0aGVuIHdlIHRyYWluIGEgbmV3IHBlcnNvbiBmcm9tIHplcm8uIFRoYXQgaXMgdHdvIG1vcmUgbW9udGhzIG9mIGV4dHJhIHdvcmsgZm9yIHVzLiBHaXZpbmcgQWxpc3RhaXIgdHdvIG1vcmUgd2Vla3MgaXMgYWN0dWFsbHkgY2hlYXBlciBmb3IgZXZlcnlvbmUuIFNvIGhlcmUgaXMgbXkgcGxhbi4gV2Ugc2l0IGRvd24gd2l0aCBoaW0gXHUyMDE0IG9uZSBob25lc3QsIGZyaWVuZGx5IGNvbnZlcnNhdGlvbiwgbm90IGNyaXRpY2lzbSBiZXR3ZWVuIHRhc2tzLiBXZSB0ZWxsIGhpbSBjbGVhcmx5OiB5b3VyIGpvYiBpcyBhdCByaXNrLCBhbmQgd2Ugd2FudCB0byBoZWxwIHlvdS4gV2UgZ2l2ZSBoaW0gYSB3cml0dGVuIGNoZWNrbGlzdCBmb3IgaGlzIGRhaWx5IHRhc2tzLCBhbmQgZXZlcnkgRnJpZGF5IHdlIHJldmlldyBoaXMgd2VlayB0b2dldGhlciwgZmlmdGVlbiBtaW51dGVzLiBJZiBhZnRlciB0d28gd2Vla3Mgbm90aGluZyBjaGFuZ2VzLCB0aGVuIEkgd2lsbCBnbyB0byB0aGUgYm9zcyB3aXRoIHlvdSwgSSBwcm9taXNlLiBCdXQgbGV0J3MgdHJ5IG9uZSByZWFsIGNoYW5jZSBmaXJzdC4gQ2FuIHlvdSBhZ3JlZSB0byB0aGF0PyIsInM5IjoiRXVuLUp1bmcsIGxldCdzIHRhbGsgYmVmb3JlIHlvdSBnbyB0byB0aGUgYm9zcyBcdTIwMTQgSSB1bmRlcnN0YW5kIHRoZSBmcnVzdHJhdGlvbiBjb21wbGV0ZWx5LCBhbmQgaG9uZXN0bHksIHlvdSdyZSBub3Qgd3JvbmcgYWJvdXQgdGhlIGZhY3RzOiBhIG1vbnRoIGluLCBBbGlzdGFpciBpcyBzdGlsbCBlcnJvci1wcm9uZSwgYW5kIHRoZSBmZWVkYmFjayBkb2Vzbid0IHNlZW0gdG8gbGFuZC4gQnV0IEkgd2FudCB0byBwZXJzdWFkZSB5b3UgdG8gdHJ5IG9uZSBtb3JlIHN0cnVjdHVyZWQgYXR0ZW1wdCBiZWZvcmUgd2UgcmVjb21tZW5kIGZpcmluZyBoaW0sIGFuZCBoZXJlJ3MgbXkgcmVhc29uaW5nLiBGaXJzdCwgZmFpcm5lc3MgYW5kIHJlYWxpc206IG9uZSBtb250aCBpcyBhIGJydXRhbGx5IHNob3J0IHJ1bndheSBmb3IgYSBuZXcgcm9sZS4gVGhpbmsgYmFjayB0byBvdXIgb3duIGZpcnN0IG1vbnRocyBcdTIwMTQgSSBjZXJ0YWlubHkgd2Fzbid0IGVycm9yLWZyZWUgXHUyMDE0IGFuZCBjb25zaWRlciB0aGF0IGhlJ3MgYmVpbmcgdHJhaW5lZCBieSB0aHJlZSBwZW9wbGUsIHF1aXRlIHBvc3NpYmx5IGdpdmluZyB0aHJlZSBzbGlnaHRseSBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgZXZlcnkgcHJvY2Vzcy4gU29tZSBvZiB3aGF0IGxvb2tzIGxpa2Ugbm90IGxpc3RlbmluZyBtYXkgYWN0dWFsbHkgYmUgY29uZmxpY3RpbmcgaW5zdHJ1Y3Rpb25zLiBTZWNvbmQsIGNvbGQgZWNvbm9taWNzOiBmaXJpbmcgaGltIGRvZXNuJ3QgbWFrZSB0aGUgd29ya2xvYWQgZGlzYXBwZWFyIFx1MjAxNCBpdCByZXNldHMgaXQuIFRoZSBib3NzIHJlLW9wZW5zIHRoZSBqb2IgcG9zdGluZywgd2Vla3Mgb2YgaW50ZXJ2aWV3cyBmb2xsb3csIGFuZCB0aGVuIHdlIHRyYWluIGEgYnJhbmQtbmV3IHBlcnNvbiBmcm9tIHplcm8uIEEgZm9jdXNlZCB0d28td2VlayByZXNjdWUgYXR0ZW1wdCBpcyBmYXIgY2hlYXBlciB0aGFuIGEgdGhyZWUtbW9udGggZG8tb3Zlci4gVGhpcmQgXHUyMDE0IGFuZCB0aGlzIG1hdHRlcnMgZm9yIHVzIFx1MjAxNCB3aGVuIHdlIGVzY2FsYXRlIHRvIHRoZSBib3NzLCB0aGUgZmlyc3QgcXVlc3Rpb24gd2lsbCBiZTogd2hhdCBleGFjdGx5IGRpZCB5b3UgdHJ5PyBJIHdhbnQgb3VyIGFuc3dlciB0byBiZSBhaXJ0aWdodC4gU28gaGVyZSdzIHRoZSBjb25jcmV0ZSBwbGFuIEknbSBwcm9wb3Npbmc6IG9uZSBob25lc3Qgc2l0LWRvd24gd2l0aCBBbGlzdGFpciwgdGhlIHRocmVlIG9mIHVzLCB3aGVyZSB3ZSBzYXkgcGxhaW5seSB0aGF0IGhpcyBwb3NpdGlvbiBpcyBhdCByaXNrIFx1MjAxNCBubyBoaW50cywgbm8gc3VnYXItY29hdGluZywgYmVjYXVzZSBJIHN1c3BlY3Qgbm9ib2R5IGhhcyBhY3R1YWxseSBzYWlkIGl0LiBUaGVuIGEgd3JpdHRlbiBjaGVja2xpc3QgZm9yIGhpcyBjb3JlIHRhc2tzIHNvIGluc3RydWN0aW9ucyBzdG9wIGJlaW5nIHZlcmJhbCBhbmQgY29udHJhZGljdG9yeSwgb25lIGRlc2lnbmF0ZWQgZ28tdG8gdHJhaW5lciB0byBlbmQgdGhlIG1peGVkIG1lc3NhZ2VzLCBhbmQgYSBmaWZ0ZWVuLW1pbnV0ZSByZXZpZXcgZXZlcnkgRnJpZGF5LiBUd28gd2Vla3MsIG1lYXN1cmFibGUsIGRvY3VtZW50ZWQuIElmIG5vdGhpbmcgaW1wcm92ZXMsIEknbGwgd2FsayBpbnRvIHRoZSBib3NzJ3Mgb2ZmaWNlIHdpdGggeW91IGFuZCBzdXBwb3J0IHRoZSByZWNvbW1lbmRhdGlvbiBmdWxseS4gQnV0IGlmIGl0IHdvcmtzLCB3ZSd2ZSBzYXZlZCBhIGNvbGxlYWd1ZSBhbmQgbW9udGhzIG9mIG91ciBvd24gdGltZS4gRGVhbD8ifSx7ImsiOiJ0NyIsIm51bSI6NywidHlwZUVuIjoiRXhwcmVzc2luZyBPcGluaW9ucyIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJEbyB5b3UgdGhpbmsgYWxsIGhpZ2ggc2Nob29sIHN0dWRlbnRzIHNob3VsZCBiZSByZXF1aXJlZCB0byBwYXJ0aWNpcGF0ZSBpbiBwaHlzaWNhbCBlZHVjYXRpb24gY2xhc3Nlcz8gRXhwbGFpbiB5b3VyIHJlYXNvbnMuIiwicHJvbXB0TGVhZCI6IkFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlN0YXRlIHlvdXIgcG9zaXRpb24gY2xlYXJseSBpbiB0aGUgZmlyc3Qgc2VudGVuY2UgKHBpY2tpbmcgb25lIHNpZGUgaXMgZWFzaWVyIHRvIGRldmVsb3AgdGhhbiBzdGF5aW5nIG5ldXRyYWwpLiIsIkdpdmUgMlx1MjAxMzMgcmVhc29ucywgZWFjaCBkZXZlbG9wZWQgb3ZlciAyXHUyMDEzMyBzZW50ZW5jZXMgd2l0aCBhbiBleGFtcGxlOyA5MCBzZWNvbmRzIGlzIGxvbmcgXHUyMDE0IGRvbid0IHN0b3AgZWFybHkuIiwiQWNrbm93bGVkZ2UgdGhlIG90aGVyIHNpZGUgaW4gb25lIHNlbnRlbmNlIChUaGF0IHNhaWQsIFx1MjAyNikgdGhlbiBjb25jbHVkZSBcdTIwMTQgaXQgc2hvd3MgYmFsYW5jZWQgdGhpbmtpbmcuIiwiUGljayBvbmUgc2lkZSAodGhlIHNhbXBsZXMgYXJndWUgWUVTIC0gUEUgc2hvdWxkIGJlIHJlcXVpcmVkIGluIGhpZ2ggc2Nob29sLCB1bmxpa2UgdGhlIGNvbGxlZ2UgcXVlc3Rpb24gd2hlcmUgc3R1ZGVudHMgYXJlIGFkdWx0cykuIENvbmNyZXRlIHJlYXNvbnM6IHRlZW5hZ2VycyBhcmUgbWlub3JzIGJ1aWxkaW5nIGxpZmVsb25nIGhhYml0cywgc2NyZWVuIHRpbWUgYW5kIG9iZXNpdHkgYXJlIHJpc2luZywgYW5kIGV4ZXJjaXNlIG1lYXN1cmFibHkgaW1wcm92ZXMgbGVhcm5pbmcgYW5kIG1lbnRhbCBoZWFsdGggLSB0aGVuIGNvbmNlZGUgb25lIHNlbnRlbmNlIHRoYXQgUEUgbXVzdCBiZSBpbmNsdXNpdmUgYW5kIHZhcmllZCwgbm90IGp1c3QgY29tcGV0aXRpdmUgc3BvcnRzLiJdLCJwaHJhc2VzIjpbIklmIEkgaGFkIHRvIGNob29zZSwgSSdkIHNheVx1MjAyNiIsIk15IG1haW4gcmVhc29uIGlzXHUyMDI2IiwiRm9yIGV4YW1wbGUsIFx1MjAyNiIsIlRoYXQgc2FpZCwgXHUyMDI2IiwiQWxsIHRoaW5ncyBjb25zaWRlcmVkLCBcdTIwMjYiXX0sInM2IjoiWWVzLCBJIGJlbGlldmUgYWxsIGhpZ2ggc2Nob29sIHN0dWRlbnRzIHNob3VsZCBoYXZlIHBoeXNpY2FsIGVkdWNhdGlvbiBjbGFzc2VzLCBhbmQgSSBoYXZlIHRocmVlIHJlYXNvbnMuIEZpcnN0LCB0ZWVuYWdlcnMgdG9kYXkgbW92ZSBsZXNzIHRoYW4gYW55IGdlbmVyYXRpb24gYmVmb3JlLiBUaGV5IHNpdCBpbiBjbGFzcywgdGhlbiB0aGV5IHNpdCB3aXRoIHRoZWlyIHBob25lcywgdGhlbiB0aGV5IHNpdCB3aXRoIHZpZGVvIGdhbWVzLiBNYW55IHRlZW5zIGhhdmUgd2VpZ2h0IHByb2JsZW1zIG9yIHdlYWsgYm9kaWVzIGFscmVhZHkgYXQgZmlmdGVlbi4gU2Nob29sIFBFIGlzIHNvbWV0aW1lcyB0aGUgb25seSBob3VyIGluIHRoZSB3aG9sZSB3ZWVrIHdoZW4gdGhleSBhY3R1YWxseSBydW4gYW5kIG1vdmUuIFNlY29uZCwgaGlnaCBzY2hvb2wgc3R1ZGVudHMgYXJlIG5vdCBhZHVsdHMuIFNjaG9vbCBkZWNpZGVzIHRoYXQgbWF0aCBhbmQgRW5nbGlzaCBhcmUgcmVxdWlyZWQsIGJlY2F1c2UgeW91bmcgcGVvcGxlIG5lZWQgdGhlbSBcdTIwMTQgYW5kIGEgaGVhbHRoeSBib2R5IGlzIGp1c3QgYXMgaW1wb3J0YW50IGFzIG1hdGguIElmIHdlIGxldCB0ZWVuYWdlcnMgY2hvb3NlLCBtYW55IHdpbGwgY2hvb3NlIHRoZSBzb2ZhLCBhbmQgdGhleSB3aWxsIHJlZ3JldCBpdCBsYXRlci4gVGhpcmQsIHNwb3J0IGhlbHBzIHN0dWR5aW5nLiBBZnRlciBleGVyY2lzZSwgdGhlIGJyYWluIHdvcmtzIGJldHRlciwgc3R1ZGVudHMgZmVlbCBsZXNzIHN0cmVzcywgYW5kIHRoZXkgc2xlZXAgYmV0dGVyIGF0IG5pZ2h0LiBQRSBhbHNvIHRlYWNoZXMgdGVhbXdvcmsgYW5kIGhvdyB0byBsb3NlIGFuZCB0cnkgYWdhaW4uIE9mIGNvdXJzZSwgUEUgbGVzc29ucyBtdXN0IGJlIGZhaXIgYW5kIGZ1biBmb3IgZXZlcnlib2R5IFx1MjAxNCBub3Qgb25seSBmb290YmFsbCBmb3IgdGhlIHNwb3J0eSBraWRzLCBidXQgYWxzbyBkYW5jaW5nLCBzd2ltbWluZywgeW9nYSwgb3IganVzdCB3YWxraW5nLiBBIHNoeSBvciBiaWdnZXIga2lkIHNob3VsZCBuZXZlciBmZWVsIGFzaGFtZWQgaW4gUEUuIEJ1dCB5ZXMsIHdpdGggZ29vZCB0ZWFjaGVycywgUEUgc2hvdWxkIGRlZmluaXRlbHkgYmUgcmVxdWlyZWQuIiwiczkiOiJZZXMgXHUyMDE0IGZvciBoaWdoIHNjaG9vbCBzdHVkZW50cywgSSBmaXJtbHkgYmVsaWV2ZSBwaHlzaWNhbCBlZHVjYXRpb24gc2hvdWxkIGJlIHJlcXVpcmVkLCBhbmQgSSdkIG5vdGUgdXBmcm9udCB3aHkgdGhpcyBjYXNlIGRpZmZlcnMgZnJvbSBkZWJhdGVzIGFib3V0IGFkdWx0czogdGVlbmFnZXJzIGFyZSBtaW5vcnMsIGFuZCBzY2hvb2xzIGFyZSBleHBsaWNpdGx5IGluIHRoZSBidXNpbmVzcyBvZiByZXF1aXJpbmcgd2hhdCdzIGdvb2QgZm9yIHRoZWlyIGRldmVsb3BtZW50LiBUaGF0J3MgdGhlIGVudGlyZSBsb2dpYyBvZiBtYW5kYXRvcnkgbWF0aC4gTXkgZmlyc3QgcmVhc29uIGlzIHRoZSBwdWJsaWMgaGVhbHRoIHBpY3R1cmU6IHRoaXMgaXMgdGhlIG1vc3Qgc2VkZW50YXJ5IGdlbmVyYXRpb24gb2YgdGVlbmFnZXJzIGluIGhpc3RvcnkuIEJldHdlZW4gY2xhc3NlcywgaG9tZXdvcmssIHBob25lcyBhbmQgZ2FtaW5nLCBtYW55IHRlZW5zIGdlbnVpbmVseSBtb3ZlIGZvciBsZXNzIHRoYW4gYW4gaG91ciBhIHdlZWsgXHUyMDE0IGFuZCBhZG9sZXNjZW50IG9iZXNpdHksIHBvb3IgcG9zdHVyZSBhbmQgZWFybHkgYW54aWV0eSBkaXNvcmRlcnMgYXJlIGFsbCB0cmVuZGluZyB1cHdhcmQuIEZvciBhIHNpZ25pZmljYW50IHNoYXJlIG9mIHN0dWRlbnRzLCBQRSBpcyBsaXRlcmFsbHkgdGhlIG9ubHkgc3RydWN0dXJlZCBwaHlzaWNhbCBhY3Rpdml0eSBpbiB0aGVpciBsaXZlczsgcmVtb3ZlIHRoZSByZXF1aXJlbWVudCBhbmQgdGhhdCBudW1iZXIgZ29lcyB0byB6ZXJvLiBTZWNvbmQsIHRoZSBzY2llbmNlIG9uIGV4ZXJjaXNlIGFuZCBsZWFybmluZyBpcyB1bmFtYmlndW91czogcGh5c2ljYWwgYWN0aXZpdHkgaW1wcm92ZXMgY29uY2VudHJhdGlvbiwgbWVtb3J5IGNvbnNvbGlkYXRpb24sIHNsZWVwIHF1YWxpdHkgYW5kIG1vb2QgcmVndWxhdGlvbi4gQSBzY2hvb2wgdGhhdCBjdXRzIFBFIHRvIGFkZCBhbm90aGVyIHN0dWR5IHBlcmlvZCBpcywgaXJvbmljYWxseSwgbWFraW5nIGl0cyBzdHVkZW50cyB3b3JzZSBhdCBzdHVkeWluZy4gVGhpcmQsIFBFIHRlYWNoZXMgdGhpbmdzIG5vIG90aGVyIGNsYXNzIGNhbjogdGVhbXdvcmsgdW5kZXIgcHJlc3N1cmUsIGxvc2luZyBncmFjZWZ1bGx5LCB0cnlpbmcgYWdhaW4sIGFuZCBcdTIwMTQgY3J1Y2lhbGx5IGZvciB0ZWVuYWdlcnMgXHUyMDE0IHRoZSBoYWJpdCBvZiBleGVyY2lzZSBpdHNlbGYsIHdoaWNoIHRyYWNrcyBzdHJvbmdseSBpbnRvIGFkdWx0aG9vZC4gSGFiaXRzIGZvcm1lZCBhdCBzaXh0ZWVuIGFyZSB0aGUgY2hlYXBlc3QgaGVhbHRoIGluc3VyYW5jZSBhIHNvY2lldHkgY2FuIGJ1eS4gTm93LCB0aGUgZXNzZW50aWFsIGNvbmNlc3Npb246IHRoZSByZXF1aXJlbWVudCBpcyBvbmx5IGRlZmVuc2libGUgaWYgUEUgaXMgZG9uZSB3ZWxsLiBUaGUgb2xkIG1vZGVsIFx1MjAxNCBjb21wZXRpdGl2ZSB0ZWFtIHNwb3J0cyB3aGVyZSBhdGhsZXRpYyBraWRzIHNoaW5lIGFuZCBldmVyeW9uZSBlbHNlIGdldHMgaHVtaWxpYXRlZCBcdTIwMTQgYnJlZWRzIGxpZmVsb25nIGd5bS1hdm9pZGFuY2UuIE1vZGVybiBQRSBzaG91bGQgb2ZmZXIgY2hvaWNlczogZGFuY2UsIHN3aW1taW5nLCBoaWtpbmcsIHlvZ2EsIHN0cmVuZ3RoIHRyYWluaW5nIFx1MjAxNCBncmFkZWQgb24gcGFydGljaXBhdGlvbiBhbmQgcGVyc29uYWwgcHJvZ3Jlc3MsIG5vdCBvbiB3aG8ncyB0YWxsZXN0LiBSZXF1aXJlIHRoZSBtb3ZlbWVudCwgcGVyc29uYWxpemUgdGhlIGZvcm0uIFdpdGggdGhhdCBkZXNpZ24sIG1hbmRhdG9yeSBQRSBpc24ndCBhIGJ1cmRlbiBvbiB0ZWVuYWdlcnMgXHUyMDE0IGl0J3Mgb25lIG9mIHRoZSBiZXN0IGdpZnRzIGEgc2Nob29sIGNhbiBnaXZlIHRoZW0uIn0seyJrIjoidDgiLCJudW0iOjgsInR5cGVFbiI6IkRlc2NyaWJpbmcgYW4gVW51c3VhbCBTaXR1YXRpb24iLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiWW91IGFyZSBhdCBhIHNob3BwaW5nIG1hbGwgYW5kIHNlZSBhIG1hdGNoaW5nIHNldCBvZiBzaG9lcywgc29ja3MsIGFuZCBhIGJhZyBvbiBkaXNwbGF5LiBZb3VyIGZyaWVuZCwgSGVsZW4sIGhhcyBiZWVuIGxvb2tpbmcgZm9yIGEgbmV3IHBhaXIgb2Ygc2hvZXMgcmVjZW50bHkuIENhbGwgSGVsZW4gYW5kIGRlc2NyaWJlIGluIGRldGFpbCB3aGF0IHRoZSBzZXQgbG9va3MgbGlrZSwgYW5kIGFzayBpZiBzaGUgd291bGQgYmUgaW50ZXJlc3RlZCBpbiBidXlpbmcgdGhlIHNldC4iLCJpbWciOiJ1bnVzdWFsIiwidGlwcyI6eyJidWxsZXRzIjpbIlRoaXMgaXMgYSBQSE9ORSBDQUxMOiBncmVldCB0aGUgcmlnaHQgcGVyc29uICh0aGUgcG9saWNlIC8geW91ciBmcmllbmQpLCB0aGVuIHNheSB3aGVyZSB5b3UgYXJlLiIsIkRlc2NyaWJlIGZyb20gZ2VuZXJhbCB0byBzcGVjaWZpYzsgdGhlIHBpY3R1cmUgaXMgbWVhbnQgdG8gYmUgc3RyYW5nZSBcdTIwMTQganVzdCBkZXNjcmliZSB3aGF0IHlvdSBzZWUsIHVzaW5nICdJdCBsb29rcyBsaWtlIC8gYXMgaWZcdTIwMjYnLiIsIkVuZCB3aXRoIGEgcmVxdWVzdCBmb3IgYWN0aW9uIChzZW5kIGEgcGF0cm9sIC8gYXNrIHdoZXJlIHRvIGJ1eSkuIiwiVGhpcyBpcyBhIHBob25lIGNhbGwgdG8gSGVsZW4uIEtleSBkZXRhaWxzOiBhbiBvY2Vhbi10aGVtZWQgbWF0Y2hpbmcgc2V0IC0gc2xpcC1vbiBzaG9lcyB3aG9zZSB1cHBlciBpcyBhIHNreS1ibHVlIHNjZW5lIHdpdGggd2hpdGUgY2xvdWRzIGFuZCBzZWFndWxscyBvdmVyIGEgc2FuZHktYnJvd24gc2lkZSAod2l0aCBhIHRpbnkgcmVkIHNhaWxib2F0KSwgYSByb3VuZCBibHVlIHNob3VsZGVyIGJhZyBwYWludGVkIGxpa2UgdGhlIHNlYSAoc2t5IGFuZCBjbG91ZHMgb24gdG9wLCBzaGFya3MsIGZpc2ggYW5kIGEgc3Vua2VuIHNoaXAgYmVsb3cgdGhlIHdhdGVybGluZSwgd2l0aCBhIHllbGxvdyBzdW4pLCBhbmQgYmx1ZSBzb2NrcyBjb3ZlcmVkIGluIGxpdHRsZSBzaGFya3MsIGFuY2hvcnMgYW5kIGJ1YmJsZXMgd2l0aCBsaWdodC1ibHVlIHRvZXMgYW5kIGhlZWxzLiBFbmQgYnkgYXNraW5nIGlmIHNoZSB3YW50cyB5b3UgdG8gaG9sZCB0aGUgc2V0IG9yIHNlbmQgYSBwaG90by4iXSwicGhyYXNlcyI6WyJJJ20gY2FsbGluZyB0byByZXBvcnRcdTIwMjYiLCJQaWN0dXJlIHRoaXM6IFx1MjAyNiIsIkl0IGxvb2tzIGFzIGlmXHUyMDI2IiwiQ291bGQgeW91IHNlbmRcdTIwMjYgLyBEbyB5b3Uga25vdyB3aGVyZVx1MjAyNj8iXX0sInM2IjoiSGVsZW4sIGhpLCBpdCdzIG1lISBJIGFtIGF0IHRoZSBtYWxsIHJpZ2h0IG5vdywgYW5kIEkganVzdCBmb3VuZCBzb21ldGhpbmcgeW91IG11c3Qgc2VlIFx1MjAxNCB5b3Ugc2FpZCB5b3UgbmVlZCBuZXcgc2hvZXMsIHJpZ2h0PyBXZWxsLCB0aGVyZSBpcyBhIHdob2xlIG1hdGNoaW5nIHNldCBoZXJlOiBzaG9lcywgc29ja3MsIGFuZCBhIGJhZywgYW5kIHRoZXkgYWxsIHNob3cgYW4gb2NlYW4gcGljdHVyZS4gTGV0IG1lIGRlc2NyaWJlIGl0LiBUaGUgc2hvZXMgYXJlIHNsaXAtb24gc2hvZXMsIHdpdGhvdXQgbGFjZXMuIFRoZSB0b3AgcGFydCBpcyBza3kgYmx1ZSwgd2l0aCB3aGl0ZSBjbG91ZHMgYW5kIHNtYWxsIHNlYWd1bGxzIGZseWluZywgYW5kIHRoZSBzaWRlIGlzIHNhbmR5IGJyb3duLCBsaWtlIGEgYmVhY2guIFRoZXJlIGlzIGV2ZW4gYSB0aW55IHJlZCBzYWlsYm9hdCBvbiB0aGUgc2lkZSEgVGhleSBhcmUgc28gY3V0ZS4gVGhlIGJhZyBpcyByb3VuZCwgd2l0aCBhIGxvbmcgYmx1ZSBzdHJhcCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHNlYSBpdHNlbGY6IG9uIHRoZSB0b3AgaGFsZiwgdGhlcmUgaXMgYSBibHVlIHNreSB3aXRoIGNsb3VkcywgYW5kIG9uIHRoZSBib3R0b20gaGFsZiwgdW5kZXIgdGhlIHdhdGVyLCB0aGVyZSBhcmUgZ3JleSBzaGFya3MsIGxpdHRsZSBmaXNoLCBhbmQgXHUyMDE0IGxpc3RlbiB0byB0aGlzIFx1MjAxNCBhIHN1bmtlbiBwaXJhdGUgc2hpcCEgVGhlcmUgaXMgYWxzbyBhIGJyaWdodCB5ZWxsb3cgc3VuLiBBbmQgdGhlIHNvY2tzIGFyZSBkYXJrIGJsdWUsIGNvdmVyZWQgd2l0aCBzbWFsbCBzaGFya3MsIGFuY2hvcnMsIGFuZCB3aGl0ZSBidWJibGVzLCB3aXRoIGxpZ2h0IGJsdWUgdG9lcyBhbmQgaGVlbHMuIEV2ZXJ5dGhpbmcgbWF0Y2hlcyBwZXJmZWN0bHksIGxpa2Ugb25lIHBhaW50aW5nIGluIHRocmVlIHBhcnRzLiBJIHRoaW5rIGl0IGlzIGV4YWN0bHkgeW91ciBzdHlsZSwgSGVsZW4gXHUyMDE0IGZ1biBidXQgYmVhdXRpZnVsLiBEbyB5b3Ugd2FudCBtZSB0byBhc2sgdGhlIHNob3AgdG8gaG9sZCB0aGUgc2V0IGZvciB5b3U\/IE9yIEkgY2FuIHNlbmQgeW91IGEgcGhvdG8gcmlnaHQgbm93LiBKdXN0IHRlbGwgbWUgcXVpY2tseSwgYmVmb3JlIHNvbWVvbmUgZWxzZSBidXlzIGl0ISIsInM5IjoiSGVsZW4sIHBlcmZlY3QgdGltaW5nIFx1MjAxNCBJJ20gYXQgdGhlIG1hbGwsIHN0YW5kaW5nIGluIGZyb250IG9mIGEgZGlzcGxheSB3aW5kb3csIGFuZCBJJ3ZlIGZvdW5kIHdoYXQgbWlnaHQgYmUgdGhlIG1vc3QgWU9VIGl0ZW1zIGV2ZXIgbWFudWZhY3R1cmVkLiBZb3Uga25vdyBob3cgeW91J3ZlIGJlZW4gaHVudGluZyBmb3IgbmV3IHNob2VzPyBXZWxsLCB0aGVyZSdzIGEgbWF0Y2hpbmcgc2V0IGhlcmUgXHUyMDE0IHNob2VzLCBzb2NrcyBhbmQgYSBiYWcgXHUyMDE0IGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgb25lIGNvbnRpbnVvdXMgb2NlYW4gYXJ0d29yay4gTGV0IG1lIHdhbGsgeW91IHRocm91Z2ggaXQuIFRoZSBzaG9lcyBhcmUgY2FudmFzIHNsaXAtb25zLCBubyBsYWNlcywgYW5kIHRoZSBkZXNpZ24gaXMgZ2VudWluZWx5IGNsZXZlcjogdGhlIHVwcGVyIGhhbGYgaXMgYSBzb2Z0IHNreS1ibHVlIHdpdGggcGFpbnRlZCB3aGl0ZSBjbG91ZHMgYW5kIHRpbnkgc2VhZ3VsbHMgZ2xpZGluZyBhY3Jvc3MsIHdoaWxlIHRoZSBsb3dlciBzaWRlIGZhZGVzIGludG8gYSBzYW5keSBicm93biwgbGlrZSBhIGJlYWNoIG1lZXRpbmcgdGhlIHNreSBcdTIwMTQgYW5kIHRoZXJlJ3MgYSBtaW5pYXR1cmUgcmVkIHNhaWxib2F0IHNhaWxpbmcgYWxvbmcgdGhlIHNpZGUgb2Ygb25lIHNob2UuIFN1YnRsZSwgcGxheWZ1bCwgYmVhdXRpZnVsLiBUaGUgYmFnIGlzIHRoZSBzaG93cGllY2U6IGl0J3Mgcm91bmQsIHdpdGggYSBibHVlIHNob3VsZGVyIHN0cmFwLCBhbmQgaXQncyBwYWludGVkIGxpa2UgYSBjcm9zcy1zZWN0aW9uIG9mIHRoZSBzZWEgXHUyMDE0IGFib3ZlIHRoZSB3YXRlcmxpbmUgeW91IGdldCBza3kgYW5kIGNsb3VkcywgYW5kIGJlbG93IGl0IHRoZXJlJ3MgYSB3aG9sZSB1bmRlcndhdGVyIHdvcmxkOiBncmV5IHNoYXJrcyBhbmQgbGl0dGxlIGZpc2ggc3dpbW1pbmcgYXJvdW5kLCBhIHN1bmtlbiBzaGlwIHJlc3Rpbmcgb24gdGhlIGJvdHRvbSwgYW5kIGEgd2FybSB5ZWxsb3cgc3VuIGdsb3dpbmcgdGhyb3VnaCB0aGUgd2F0ZXIuIEhvbmVzdGx5LCBpdCdzIG1vcmUgaWxsdXN0cmF0aW9uIHRoYW4gYWNjZXNzb3J5LiBBbmQgdGhlIHNvY2tzIHRpZSBpdCBhbGwgdG9nZXRoZXI6IGRlZXAgb2NlYW4gYmx1ZSwgc3ByaW5rbGVkIHdpdGggdGlueSBzaGFya3MsIGFuY2hvcnMgYW5kIHJpc2luZyBidWJibGVzLCBmaW5pc2hlZCB3aXRoIHBhbGUgYmx1ZSB0b2VzIGFuZCBoZWVscy4gV29ybiB0b2dldGhlciwgdGhlIHdob2xlIG91dGZpdCBiYXNpY2FsbHkgdGVsbHMgYSBiZWFjaCBzdG9yeSBmcm9tIHlvdXIgYW5rbGVzIHVwLiBJdCdzIHdoaW1zaWNhbCBidXQgZ2VudWluZWx5IHN0eWxpc2ggXHUyMDE0IHZlcnkgbXVjaCB5b3VyIGFlc3RoZXRpYy4gV2FudCBtZSB0byBhc2sgdGhlbSB0byBob2xkIHRoZSBzZXQ\/IE9yIEknbGwgc2VuZCB5b3UgYSBwaG90byByaWdodCBub3cgYW5kIHlvdSBjYW4gZGVjaWRlIFx1MjAxNCBidXQgZGVjaWRlIGZhc3QsIGJlY2F1c2UgSSBndWFyYW50ZWUgdGhpcyBkaXNwbGF5IGlzIG5vdCBzdXJ2aXZpbmcgdGhlIHdlZWtlbmQuIn1dLCJ1aSI6eyJzdGFydFRlc3QiOiJTdGFydCB0aGUgdGVzdCIsIm1pY0VuYWJsZSI6IkVuYWJsZSBtaWNyb3Bob25lIiwibWljUmVhZHkiOiJNaWNyb3Bob25lIHJlYWR5IiwibWljQmxvY2tlZCI6Ik1pY3JvcGhvbmUgaXMgYmxvY2tlZCBvciB1bmF2YWlsYWJsZSBcdTIwMTQgdGhlIHBhZ2Ugd2lsbCBydW4gaW4gdGltZXItb25seSBtb2RlICh5b3UgY2FuIHN0aWxsIHByYWN0aXNlIHNwZWFraW5nIGFsb25nIHdpdGggdGhlIHRpbWVycykuIiwibWljTm90ZSI6IlJlY29yZGluZ3MgYXJlIHN0b3JlZCB0ZW1wb3JhcmlseSBpbiB5b3VyIGJyb3dzZXIgb25seSBcdTIwMTQgbm90aGluZyBpcyB1cGxvYWRlZCB0byBhbnkgc2VydmVyLiBUaGV5IGFyZSBsb3N0IHdoZW4geW91IGNsb3NlIHRoZSBwYWdlLCBzbyBkb3dubG9hZCBhbnkgeW91IHdhbnQgdG8ga2VlcC4iLCJwcmVwVGl0bGUiOiJQcmVwYXJhdGlvbiBUaW1lIiwicmVjVGl0bGUiOiJSZWNvcmRpbmciLCJzdGFydFByZXAiOiJcdTI1YjYgU3RhcnQgcHJlcGFyYXRpb24iLCJza2lwUHJlcCI6IlNraXAgXHUyMDE0IHJlY29yZCBub3cgXHUwMGJiIiwic3RvcFJlYyI6Ilx1MjVhMCBTdG9wIHJlY29yZGluZyIsInJlY29yZGVkIjoiUmVjb3JkZWQiLCJyZVJlY29yZCI6Ilx1MjFiYiBSZWNvcmQgYWdhaW4iLCJkb3dubG9hZCI6Ilx1MmIwNyBEb3dubG9hZCIsInRpbWVyT25seSI6IlRpbWVyLW9ubHkgbW9kZSAobm90IHJlY29yZGluZykiLCJzcGVha05vdyI6IlNQRUFLIE5PVyBcdTIwMTQgcmVjb3JkaW5nIHN0b3BzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aW1lIGlzIHVwIiwibmV4dCI6Ik5FWFQiLCJjaG9vc2VIaW50IjoiQ2xpY2sgdG8gY2hvb3NlIG9uZSBvcHRpb24gXHUyMDE0IGlmIHRoZSA2MCBzZWNvbmRzIHJ1biBvdXQsIHRoZSBzeXN0ZW0gY2hvb3NlcyBmb3IgeW91IiwiY29uZmlybUNob2ljZSI6IkNvbmZpcm0gY2hvaWNlICYgY29udGludWUgXHUwMGJiIiwieW91ckNob2ljZSI6IllvdXIgQ2hvaWNlIiwidGlwc1RvZ2dsZSI6Ilx1ZDgzZFx1ZGNhMSBUaXBzICYgc2FtcGxlIGFuc3dlcnMgKG9wZW4gYWZ0ZXIgeW91IGZpbmlzaCBzcGVha2luZykiLCJ0YWJUaXBzIjoiT3V0bGluZSAmIHBocmFzZXMiLCJ0YWJTNiI6IlNhbXBsZSBDTEIgNiIsInRhYlM5IjoiU2FtcGxlIENMQiA5IiwidGFiUnVicmljIjoiU2VsZi1hc3Nlc3NtZW50IiwicnVicmljTm90ZSI6Ikxpc3RlbiB0byB5b3VyIHJlY29yZGluZywgdGhlbiByYXRlIHlvdXJzZWxmIDFcdTIwMTM1IG9uIGVhY2ggY3JpdGVyaW9uICh0aGUgNCBvZmZpY2lhbCBDRUxQSVAgcmF0aW5nIGRpbWVuc2lvbnMpOiIsInJ1YnJpY0NyaXQiOlsiQ29udGVudCAmIENvaGVyZW5jZSBcdTIwMTQgY29tcGxldGUgaWRlYXMsIGxvZ2ljYWwgZmxvdyIsIlZvY2FidWxhcnkgXHUyMDE0IHJhbmdlIGFuZCBwcmVjaXNpb24iLCJMaXN0ZW5hYmlsaXR5IFx1MjAxNCBwcm9udW5jaWF0aW9uLCBpbnRvbmF0aW9uLCBmbHVlbmN5IiwiVGFzayBGdWxmaWxsbWVudCBcdTIwMTQgYWRkcmVzc2VzIHRoZSB0YXNrLCBhcHByb3ByaWF0ZSBsZW5ndGgiXSwiZXN0aW1hdGUiOiJFc3RpbWF0ZWQgbGV2ZWwgKGZvciByZWZlcmVuY2UpOiIsImVzdERpc2NsYWltZXIiOiJTZWxmLWFzc2Vzc21lbnQgaXMgYSByb3VnaCBndWlkZSBvbmx5IFx1MjAxNCBpdCBkb2VzIG5vdCByZXBsYWNlIGFuIG9mZmljaWFsIHNjb3JlLiIsInVzZWZ1bFBocmFzZXMiOiJVc2VmdWwgcGhyYXNlcyIsImVuZFRpdGxlIjoiU3BlYWtpbmcgdGVzdCBjb21wbGV0ZSEiLCJlbmRTdWIiOiJSZXBsYXkgZWFjaCB0YXNrLCBjb21wYXJlIHlvdXIgYW5zd2VycyB3aXRoIHRoZSBDTEIgNiAvIENMQiA5IHNhbXBsZXMsIHRoZW4gcmF0ZSB5b3Vyc2VsZi4iLCJlbmROb1JlYyI6Im5vdCByZWNvcmRlZCIsImVuZFJlZG8iOiJcdTIxYmIgU3RhcnQgb3ZlciIsImVuZFQyIjoiQ29udGludWUgdG8gUHJhY3RpY2UgVGVzdCIsImVuZEh1YiI6Ilx1MjE5MCBCYWNrIHRvIENFTFBJUCBIdWIiLCJ3YXJtdXBCYWRnZSI6Ildhcm0tdXAgXHUyMDE0IG5vdCBzY29yZWQiLCJpbnRyb05vdGVzIjpbIkFuIGFjY3VyYXRlIHNpbXVsYXRpb24gb2YgdGhlIHJlYWwgQ0VMUElQIEdlbmVyYWwgU3BlYWtpbmcgdGVzdDogMSBwcmFjdGljZSAod2FybS11cCkgdGFzayArIDggc2NvcmVkIHRhc2tzLCBhYm91dCAyMCBtaW51dGVzIGluIHRvdGFsLiIsIkVhY2ggdGFzazogcmVhZCB0aGUgcHJvbXB0IFx1MjE5MiA8Yj5QcmVwYXJhdGlvbjwvYj4gY291bnRkb3duIFx1MjE5MiBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IHRvIDxiPlJlY29yZGluZzwvYj4gKHdpdGggYSBiZWVwKSBcdTIxOTIgc3RvcHMgd2hlbiB0aW1lIGlzIHVwLiIsIk9uIHRoZSByZWFsIHRlc3QgeW91IGNhbm5vdCBnbyBiYWNrIHRvIGEgcHJldmlvdXMgdGFzay4gSW4gcHJhY3RpY2UgbW9kZSwgeW91IGNhbiBjbGljayB0aGUgbnVtYmVyZWQgY2hpcHMgYWJvdmUgdG8gcmV2aXNpdCBhbnkgdGFzay4iLCJBZnRlciBzcGVha2luZyBvbiBlYWNoIHRhc2ssIG9wZW4gPGI+VGlwcyAmIHNhbXBsZSBhbnN3ZXJzPC9iPiB0byBjb21wYXJlIHlvdXIgcmVzcG9uc2Ugd2l0aCB0aGUgQ0xCIDYgYW5kIENMQiA5IHNhbXBsZXMuIl0sImhlcm9UYWciOiJDRUxQSVAgR2VuZXJhbCBcdTIwMTQgU3BlYWtpbmciLCJoZXJvTWV0YSI6WyI4IHRhc2tzICsgd2FybS11cCIsIn4yMCBtaW51dGVzIiwiUmVjb3JkICYgcmVwbGF5IiwiQ0xCIDYgLyBDTEIgOSBzYW1wbGVzIl19fTsKLyogQ0VMUElQIFNwZWFraW5nIEVuZ2luZSB2MS4wIC0gQWxsRW5nbGlzaDRVIC0gdmFuaWxsYSBKUywgcHJlZml4IGNscC1zcGsgKi8KKGZ1bmN0aW9uKCl7CiJ1c2Ugc3RyaWN0IjsKdmFyIEQgPSB3aW5kb3cuQ0xQU1BLX0RBVEEsIFUgPSBELnVpOwp2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHAtc3BrLXJvb3QiKTsKaWYoIXJvb3QpIHJldHVybjsKCi8qIC0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLSAqLwp2YXIgQ1NTID0gIiIrCiIuY2xwLXNway13cmFwe21heC13aWR0aDoxMTQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjAgMTRweCA2MHB4O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLEFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6IzIzMjcyZDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfSIrCiIuY2xwLXNway13cmFwICp7Ym94LXNpemluZzpib3JkZXItYm94fSIrCiIuY2xwLXNway1oZXJve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2YxZDFkIDAlLCNiOTFjMWMgNTUlLCNkYzI2MjYgMTAwJSk7Ym9yZGVyLXJhZGl1czoxOHB4O2NvbG9yOiNmZmY7cGFkZGluZzozMHB4IDMwcHggMjZweDttYXJnaW46MThweCAwIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1oZXJvOmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTYwcHg7dG9wOi02MHB4O3dpZHRoOjIyMHB4O2hlaWdodDoyMjBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX0iKwoiLmNscC1zcGstaGVybyAudGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTYpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMzUpO3BhZGRpbmc6M3B4IDEycHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTIuNXB4O2xldHRlci1zcGFjaW5nOi42cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1oZXJvIGgxe21hcmdpbjoxMHB4IDAgNnB4O2ZvbnQtc2l6ZToyN3B4O2xpbmUtaGVpZ2h0OjEuMjU7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstaGVybyAubWV0YXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tdG9wOjEycHh9IisKIi5jbHAtc3BrLWhlcm8gLm1ldGEgc3BhbntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIyKTtwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjEyLjVweH0iKwoiLmNscC1zcGstY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luOjAgMCAxNHB4fSIrCiIuY2xwLXNway1jaGlwe21pbi13aWR0aDozOHB4O2hlaWdodDozNHB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjoxLjVweCBzb2xpZCAjZDNkOGRmO2JhY2tncm91bmQ6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzLjVweDtjb2xvcjojNWI2NTcyO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MCAxMHB4fSIrCiIuY2xwLXNway1jaGlwLmN1cntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstY2hpcC5kb25le2JhY2tncm91bmQ6I2U2ZjRlYTtib3JkZXItY29sb3I6IzdiYzM5NDtjb2xvcjojMWU3YjNlfSIrCiIuY2xwLXNway1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZDlkZGUzO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDJweCAxMHB4IHJnYmEoMzAsNDAsNjAsLjA2KX0iKwoiLmNscC1zcGstYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDojZWNlY2VlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkNWQ1ZDg7cGFkZGluZzo5cHggMTRweDtmbGV4LXdyYXA6d3JhcH0iKwoiLmNscC1zcGstYmFyIC50e2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTQuNXB4O2NvbG9yOiMzYzQwNDZ9IisKIi5jbHAtc3BrLWJhciAubXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzU1NTt3aGl0ZS1zcGFjZTpub3dyYXB9IisKIi5jbHAtc3BrLWJhciAubSBie2NvbG9yOiMyMzI3MmR9IisKIi5jbHAtc3BrLW5leHR7YmFja2dyb3VuZDojMTQ2N2M2O2NvbG9yOiNmZmY7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7bGV0dGVyLXNwYWNpbmc6LjhweDtwYWRkaW5nOjdweCAxOHB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1uZXh0OmhvdmVye2JhY2tncm91bmQ6IzBmNTdhYn0iKwoiLmNscC1zcGstYm9keXtwYWRkaW5nOjE4cHggMjBweCAyMnB4fSIrCiIuY2xwLXNway1wcm9tcHR7ZGlzcGxheTpmbGV4O2dhcDo5cHg7Y29sb3I6IzBiNTM5NDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE1LjVweDtsaW5lLWhlaWdodDoxLjV9IisKIi5jbHAtc3BrLXByb21wdCAuaXtmbGV4OjAgMCBhdXRvO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMmM3Y2IwO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6ODAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjJweH0iKwoiLmNscC1zcGstbGVhZHtjb2xvcjojMGI1Mzk0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjRweH0iKwoiLmNscC1zcGstY2hvb3NlMXttYXJnaW46MTRweCAwIDA7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZjVmN2ZhO2JvcmRlcjoxcHggc29saWQgI2RmZTRlYTtib3JkZXItcmFkaXVzOjlweDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNTV9IisKIi5jbHAtc3BrLWNob29zZTEgLmV7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiM4YTFmMWY7bGV0dGVyLXNwYWNpbmc6LjRweH0iKwoiLmNscC1zcGstaW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjU0MHB4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjY2ZkNGRhO2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbjoxNnB4IDAgNHB4fSIrCiIuY2xwLXNway1ub3Rle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTkyOWM7bWFyZ2luLXRvcDo2cHh9IisKIi5jbHAtc3BrLXRpbWVycm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDAgNnB4fSIrCiIuY2xwLXNway10aW1lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2JhY2tncm91bmQ6I2U5ZWNlZjtib3JkZXI6MXB4IHNvbGlkICNkNmRhZGU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweCAyNnB4O21pbi13aWR0aDozMDBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIrCiIuY2xwLXNway10aW1lciAuaWN7d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZDZkYWRlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MjJweH0iKwoiLmNscC1zcGstdGltZXIgLmxie2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzMzODNmO2ZvbnQtc2l6ZToxNXB4fSIrCiIuY2xwLXNway10aW1lciAubntmb250LXNpemU6MjZweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzBiNTdkMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7bWluLXdpZHRoOjUycHg7dGV4dC1hbGlnbjpjZW50ZXJ9IisKIi5jbHAtc3BrLXRpbWVyLnJlY3tiYWNrZ3JvdW5kOiNmZGVjZWI7Ym9yZGVyLWNvbG9yOiNmM2I2YjN9IisKIi5jbHAtc3BrLXRpbWVyLnJlYyAubntjb2xvcjojYzYyODI4fSIrCiIuY2xwLXNway10aW1lci5yZWMgLmlje2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2YzYjZiM30iKwoiLmNscC1zcGstZG90e3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZTUzOTM1O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2FuaW1hdGlvbjpjbHBibGluayAxcyBpbmZpbml0ZX0iKwoiQGtleWZyYW1lcyBjbHBibGlua3swJSwxMDAle29wYWNpdHk6MX01MCV7b3BhY2l0eTouMjV9fSIrCiIuY2xwLXNway1jdHJ7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luOjE0cHggMCAycHh9IisKIi5jbHAtc3BrLWJ0bntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzMzMzgzZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1idG46aG92ZXJ7Ym9yZGVyLWNvbG9yOiM5YWEzYWR9IisKIi5jbHAtc3BrLWJ0bi5wcml7YmFja2dyb3VuZDojMGI1N2QwO2JvcmRlci1jb2xvcjojMGI1N2QwO2NvbG9yOiNmZmZ9IisKIi5jbHAtc3BrLWJ0bi5wcmk6aG92ZXJ7YmFja2dyb3VuZDojMGE0Y2I1fSIrCiIuY2xwLXNway1idG4ud2FybntiYWNrZ3JvdW5kOiNjNjI4Mjg7Ym9yZGVyLWNvbG9yOiNjNjI4Mjg7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstc3BlYWtub3d7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2M2MjgyODtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDo4cHg7bGV0dGVyLXNwYWNpbmc6LjNweH0iKwoiLmNscC1zcGstcmV2aWV3e21hcmdpbjoxNnB4IGF1dG8gMDttYXgtd2lkdGg6NjQwcHg7YmFja2dyb3VuZDojZjJmOWYzO2JvcmRlcjoxcHggc29saWQgI2JmZTNjNjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE4cHh9IisKIi5jbHAtc3BrLXJldmlldyAub2t7Y29sb3I6IzFlN2IzZTtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0LjVweH0iKwoiLmNscC1zcGstcmV2aWV3IGF1ZGlve3dpZHRoOjEwMCU7bWFyZ2luOjEwcHggMCA4cHh9IisKIi5jbHAtc3BrLW1pY3ttYXJnaW46MTJweCBhdXRvIDA7bWF4LXdpZHRoOjY0MHB4O2JhY2tncm91bmQ6I2ZmZjhlNjtib3JkZXI6MXB4IHNvbGlkICNlY2Q5YTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM3YTViMTJ9IisKIi5jbHAtc3BrLW9wdHN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbjoxOHB4IDAgNHB4fSIrCiIuY2xwLXNway1jYXJke2JvcmRlcjoycHggc29saWQgI2Q1ZGFlMDtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxM3B4IDE1cHggMTVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZmY7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30iKwoiLmNscC1zcGstY2FyZDpob3Zlcntib3JkZXItY29sb3I6IzhmYjRlOH0iKwoiLmNscC1zcGstY2FyZC5zZWx7Ym9yZGVyLWNvbG9yOiMyZTllNGY7YmFja2dyb3VuZDojZWVmOWYwfSIrCiIuY2xwLXNway1jYXJkLnBsYWlue2N1cnNvcjpkZWZhdWx0fSIrCiIuY2xwLXNway1jYXJkIC5oZHt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNmI3NDgwO2xldHRlci1zcGFjaW5nOi4zcHg7bWFyZ2luLWJvdHRvbTo4cHh9IisKIi5jbHAtc3BrLWNhcmQgaW1ne3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlNmVhfSIrCiIuY2xwLXNway1jYXJkIC50dHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE1cHg7bWFyZ2luOjEwcHggMCA2cHg7Y29sb3I6IzIzMjcyZH0iKwoiLmNscC1zcGstY2FyZCB1bHttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6IzNjNDM0Yn0iKwoiLmNscC1zcGstY2FyZCAucGlja3ttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMyZTllNGY7Zm9udC1zaXplOjEzcHg7bWluLWhlaWdodDoxOHB4fSIrCiIuY2xwLXNway1oaW50e3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2Yjc0ODA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1hY2N7bWFyZ2luLXRvcDoyMnB4O2JvcmRlcjoxcHggc29saWQgI2Q5ZGRlMztib3JkZXItcmFkaXVzOjExcHg7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1hY2M+YnV0dG9ue3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQ6I2Y2ZjdmOTtib3JkZXI6MDtwYWRkaW5nOjEycHggMTZweDtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzNjNDA0NjtjdXJzb3I6cG9pbnRlcn0iKwoiLmNscC1zcGstYWNjYm9keXtkaXNwbGF5Om5vbmU7cGFkZGluZzoxNHB4IDE2cHggMThweDtiYWNrZ3JvdW5kOiNmZmZ9IisKIi5jbHAtc3BrLWFjYy5vcGVuIC5jbHAtc3BrLWFjY2JvZHl7ZGlzcGxheTpibG9ja30iKwoiLmNscC1zcGstdGFic3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEycHh9IisKIi5jbHAtc3BrLXRhYntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjZweCAxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0YTUyNWN9IisKIi5jbHAtc3BrLXRhYi5vbntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstdGFicGFuZXtkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY1fSIrCiIuY2xwLXNway10YWJwYW5lLm9ue2Rpc3BsYXk6YmxvY2t9IisKIi5jbHAtc3BrLXRhYnBhbmUgdWx7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luOjhweCAwfSIrCiIuY2xwLXNway10YWJwYW5lIGxpe21hcmdpbjo1cHggMH0iKwoiLmNscC1zcGstc2FtcGxle2JhY2tncm91bmQ6I2Y4ZjlmYjtib3JkZXI6MXB4IHNvbGlkICNlM2U3ZWM7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICMwYjU3ZDA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxM3B4IDE2cHg7d2hpdGUtc3BhY2U6cHJlLXdyYXB9IisKIi5jbHAtc3BrLXNhbXBsZS5zNntib3JkZXItbGVmdC1jb2xvcjojZThhMTNjfSIrCiIuY2xwLXNway1waHJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1waHIgc3BhbntiYWNrZ3JvdW5kOiNlZWYzZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2RkZGY1O2NvbG9yOiMxNzRhOWM7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1ydWJ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7Zm9udC1zaXplOjEzLjVweH0iKwoiLmNscC1zcGstcnViIHRke3BhZGRpbmc6N3B4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVmMGYzfSIrCiIuY2xwLXNway1zdGFye2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxOXB4O2NvbG9yOiNjOWNmZDY7cGFkZGluZzowIDFweDt1c2VyLXNlbGVjdDpub25lfSIrCiIuY2xwLXNway1zdGFyLm9ue2NvbG9yOiNmMGE3MWJ9IisKIi5jbHAtc3BrLWVzdHttYXJnaW4tdG9wOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZTdiM2V9IisKIi5jbHAtc3BrLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2ZmZjNjZDtib3JkZXI6MXB4IHNvbGlkICNlOGQ0OGI7Y29sb3I6IzdhNWIxMjtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAxMnB4O21hcmdpbi1ib3R0b206MTBweH0iKwoiLmNscC1zcGstaW50cm8gdWx7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjc7cGFkZGluZy1sZWZ0OjIwcHh9IisKIi5jbHAtc3BrLWludHJvIGxpe21hcmdpbjo3cHggMH0iKwoiLmNscC1zcGstbWljcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXA7YmFja2dyb3VuZDojZjZmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UwZTRlOTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxM3B4IDE2cHg7bWFyZ2luOjE2cHggMH0iKwoiLmNscC1zcGstbWljc3R7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHh9IisKIi5jbHAtc3BrLW1pY3N0Lm9re2NvbG9yOiMxZTdiM2V9LmNscC1zcGstbWljc3QuYmFke2NvbG9yOiNjNjI4Mjh9IisKIi5jbHAtc3BrLWVuZCB0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJTtmb250LXNpemU6MTRweH0iKwoiLmNscC1zcGstZW5kIHRkLC5jbHAtc3BrLWVuZCB0aHtwYWRkaW5nOjlweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VjZWZmMjt0ZXh0LWFsaWduOmxlZnR9IisKIi5jbHAtc3BrLWVuZCBhdWRpb3toZWlnaHQ6MzRweDttYXgtd2lkdGg6MjMwcHh9IisKIkBtZWRpYShtYXgtd2lkdGg6NzAwcHgpey5jbHAtc3BrLW9wdHN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0uY2xwLXNway1iYXIgLm17b3JkZXI6MzttYXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LmNscC1zcGstaGVybyBoMXtmb250LXNpemU6MjJweH0uY2xwLXNway1ib2R5e3BhZGRpbmc6MTRweCAxMnB4IDE4cHh9fSI7CnZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7IHN0LnRleHRDb250ZW50ID0gQ1NTOyBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0KTsKCi8qIC0tLS0tLS0tLS0gc3RhdGUgLS0tLS0tLS0tLSAqLwp2YXIgUyA9IHsKICBjdXI6IC0xLCAgICAgICAgICAgIC8qIC0xIGludHJvLCAwLi44IHRhc2tzLCA5OSBlbmQgKi8KICBtaWNTdGF0ZTogImlkbGUiLCAgIC8qIGlkbGV8b2t8YmFkICovCiAgc3RyZWFtOiBudWxsLCByZWNvcmRlcjogbnVsbCwgY2h1bmtzOiBbXSwKICB0aW1lcjogbnVsbCwgcGhhc2U6IHt9LCB0NWNob2ljZToge30sIHJlY3M6IHt9LCBydWJyaWM6IHt9LAogIG1pbWU6ICIiLCBleHQ6ICJ3ZWJtIgp9OwpELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkID8gImNob29zZS1pZGxlIiA6ICJpZGxlIjsgfSk7CgpmdW5jdGlvbiBwaWNrTWltZSgpewogIGlmKCF3aW5kb3cuTWVkaWFSZWNvcmRlcikgcmV0dXJuIG51bGw7CiAgdmFyIGNhbmRzID0gW1siYXVkaW8vd2VibTtjb2RlY3M9b3B1cyIsIndlYm0iXSxbImF1ZGlvL3dlYm0iLCJ3ZWJtIl0sWyJhdWRpby9tcDQiLCJtNGEiXSxbImF1ZGlvL29nZztjb2RlY3M9b3B1cyIsIm9nZyJdXTsKICBmb3IodmFyIGk9MDtpPGNhbmRzLmxlbmd0aDtpKyspeyB0cnl7IGlmKE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKGNhbmRzW2ldWzBdKSkgcmV0dXJuIGNhbmRzW2ldOyB9Y2F0Y2goZSl7fSB9CiAgcmV0dXJuIFsiIiwid2VibSJdOwp9CmZ1bmN0aW9uIGVuc3VyZU1pYyhjYil7CiAgaWYoUy5taWNTdGF0ZT09PSJvayIpIHJldHVybiBjYih0cnVlKTsKICBpZihTLm1pY1N0YXRlPT09ImJhZCIpIHJldHVybiBjYihmYWxzZSk7CiAgaWYoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhIHx8ICF3aW5kb3cuTWVkaWFSZWNvcmRlcil7IFMubWljU3RhdGU9ImJhZCI7IHJldHVybiBjYihmYWxzZSk7IH0KICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7YXVkaW86dHJ1ZX0pLnRoZW4oZnVuY3Rpb24oc3RyZWFtKXsKICAgIFMuc3RyZWFtID0gc3RyZWFtOyB2YXIgbSA9IHBpY2tNaW1lKCk7IFMubWltZSA9IG1bMF07IFMuZXh0ID0gbVsxXTsgUy5taWNTdGF0ZT0ib2siOyBjYih0cnVlKTsKICB9KS5jYXRjaChmdW5jdGlvbigpeyBTLm1pY1N0YXRlPSJiYWQiOyBjYihmYWxzZSk7IH0pOwp9CmZ1bmN0aW9uIGJlZXAobil7CiAgdHJ5ewogICAgdmFyIGN0eCA9IHdpbmRvdy5fX2NscEFDID0gd2luZG93Ll9fY2xwQUMgfHwgbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgdmFyIHQwID0gY3R4LmN1cnJlbnRUaW1lOwogICAgZm9yKHZhciBpPTA7aTxuO2krKyl7CiAgICAgIHZhciBvID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICAgIG8uZnJlcXVlbmN5LnZhbHVlID0gODgwOyBvLmNvbm5lY3QoZyk7IGcuY29ubmVjdChjdHguZGVzdGluYXRpb24pOwogICAgICBnLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLHQwK2kqMC4yNSk7IGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMTgsdDAraSowLjI1KzAuMDIpOwogICAgICBnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsdDAraSowLjI1KzAuMTgpOwogICAgICBvLnN0YXJ0KHQwK2kqMC4yNSk7IG8uc3RvcCh0MCtpKjAuMjUrMC4yKTsKICAgIH0KICB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIHN0b3BUaW1lcigpeyBpZihTLnRpbWVyKXsgY2xlYXJJbnRlcnZhbChTLnRpbWVyKTsgUy50aW1lcj1udWxsOyB9IH0KZnVuY3Rpb24gY291bnRkb3duKHNlY3MsIG9uVGljaywgb25FbmQpewogIHN0b3BUaW1lcigpOwogIHZhciBlbmQgPSBEYXRlLm5vdygpICsgc2VjcyoxMDAwOwogIG9uVGljayhzZWNzKTsKICBTLnRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZW5kLURhdGUubm93KCkpLzEwMDApKTsKICAgIG9uVGljayhsZWZ0KTsKICAgIGlmKGxlZnQ8PTApeyBzdG9wVGltZXIoKTsgb25FbmQoKTsgfQogIH0sIDI1MCk7Cn0KZnVuY3Rpb24gc3RvcFJlY29yZGluZygpewogIGlmKFMucmVjb3JkZXIgJiYgUy5yZWNvcmRlci5zdGF0ZSE9PSJpbmFjdGl2ZSIpeyB0cnl7IFMucmVjb3JkZXIuc3RvcCgpOyB9Y2F0Y2goZSl7fSB9CiAgUy5yZWNvcmRlciA9IG51bGw7Cn0KZnVuY3Rpb24gbGVhdmVDbGVhbnVwKCl7IHN0b3BUaW1lcigpOyBzdG9wUmVjb3JkaW5nKCk7IH0KCi8qIC0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGVsKHRhZywgY2xzLCBodG1sKXsgdmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOyBpZihjbHMpZS5jbGFzc05hbWU9Y2xzOyBpZihodG1sIT1udWxsKWUuaW5uZXJIVE1MPWh0bWw7IHJldHVybiBlOyB9CmZ1bmN0aW9uIGZtdE1ldGEodCl7CiAgaWYodC5waGFzZWQpIHJldHVybiAiIjsKICByZXR1cm4gIlByZXBhcmF0aW9uOiA8Yj4iK3QucHJlcCsiIHNlY29uZHM8L2I+ICZuYnNwO1JlY29yZGluZzogPGI+Iit0LnJlYysiIHNlY29uZHM8L2I+IjsKfQpmdW5jdGlvbiB0YXNrVGl0bGUodCl7CiAgaWYodC53YXJtdXApIHJldHVybiBELmhlYWRlcisiIC0gU3BlYWtpbmcgUHJhY3RpY2UgVGFzayI7CiAgcmV0dXJuIEQuaGVhZGVyKyIgLSBTcGVha2luZyBUYXNrICIrdC5udW0rIjogIit0LnR5cGVFbjsKfQpmdW5jdGlvbiBlc3RUZXh0KGF2Zyl7CiAgaWYoYXZnPj00LjUpIHJldHVybiAiQ0xCIDkrIjsgaWYoYXZnPj0zLjUpIHJldHVybiAiQ0xCIDdcdTIwMTM4IjsgaWYoYXZnPj0yLjUpIHJldHVybiAiQ0xCIDVcdTIwMTM2IjsgcmV0dXJuICJDTEIgNCBvciBiZWxvdyI7Cn0KCi8qIC0tLS0tLS0tLS0gcmVuZGVyIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gcmVuZGVyKCl7CiAgbGVhdmVDbGVhbnVwKCk7CiAgcm9vdC5pbm5lckhUTUwgPSAiIjsKICB2YXIgd3JhcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXdyYXAiKTsKICB3cmFwLmFwcGVuZENoaWxkKGhlcm8oKSk7CiAgaWYoUy5jdXI+PTAgJiYgUy5jdXI8RC50YXNrcy5sZW5ndGgpIHdyYXAuYXBwZW5kQ2hpbGQoY2hpcHMoKSk7CiAgaWYoUy5jdXI9PT0tMSkgd3JhcC5hcHBlbmRDaGlsZChpbnRybygpKTsKICBlbHNlIGlmKFMuY3VyPT09OTkpIHdyYXAuYXBwZW5kQ2hpbGQoZW5kU2NyZWVuKCkpOwogIGVsc2Ugd3JhcC5hcHBlbmRDaGlsZCh0YXNrUGFuZWwoRC50YXNrc1tTLmN1cl0pKTsKICByb290LmFwcGVuZENoaWxkKHdyYXApOwogIHRyeXsgd2luZG93LnNjcm9sbFRvKHt0b3A6IHJvb3Qub2Zmc2V0VG9wLTEwLCBiZWhhdmlvcjoic21vb3RoIn0pOyB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIGhlcm8oKXsKICB2YXIgaCA9IGVsKCJkaXYiLCJjbHAtc3BrLWhlcm8iKTsKICBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidGFnIixVLmhlcm9UYWcpKTsKICBoLmFwcGVuZENoaWxkKGVsKCJoMSIsbnVsbCxELnRpdGxlLnNwbGl0KCJcdTIwMTQiKVsxXSA\/ICJTcGVha2luZyBcdTIwMTQiK0QudGl0bGUuc3BsaXQoIlx1MjAxNCIpWzFdIDogRC50aXRsZSkpOwogIHZhciBtID0gZWwoImRpdiIsIm1ldGEiKTsKICBVLmhlcm9NZXRhLmZvckVhY2goZnVuY3Rpb24oeCl7IG0uYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwseCkpOyB9KTsKICBoLmFwcGVuZENoaWxkKG0pOwogIHJldHVybiBoOwp9CmZ1bmN0aW9uIGNoaXBzKCl7CiAgdmFyIGMgPSBlbCgiZGl2IiwiY2xwLXNway1jaGlwcyIpOwogIEQudGFza3MuZm9yRWFjaChmdW5jdGlvbih0LGkpewogICAgdmFyIGIgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoaT09PVMuY3VyPyIgY3VyIjooUy5yZWNzW3Qua10\/IiBkb25lIjoiIikpLCB0Lndhcm11cD8iVyI6U3RyaW5nKHQubnVtKSk7CiAgICBiLnRpdGxlID0gdC50eXBlRW47CiAgICBiLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBTLmN1cj1pOyByZW5kZXIoKTsgfTsKICAgIGMuYXBwZW5kQ2hpbGQoYik7CiAgfSk7CiAgdmFyIGUgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoUy5jdXI9PT05OT8iIGN1ciI6IiIpLCJcdWQ4M2NcdWRmYzEiKTsKICBlLnRpdGxlID0gIkZpbmlzaCI7IGUub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTk5OyByZW5kZXIoKTsgfTsKICBjLmFwcGVuZENoaWxkKGUpOwogIHJldHVybiBjOwp9CmZ1bmN0aW9uIGludHJvKCl7CiAgdmFyIHAgPSBlbCgiZGl2IiwiY2xwLXNway1wYW5lbCBjbHAtc3BrLWludHJvIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyIpKTsKICB2YXIgbnggPSBlbCgiYnV0dG9uIiwiY2xwLXNway1uZXh0IixVLm5leHQpOyBueC5zdHlsZS5tYXJnaW5MZWZ0PSJhdXRvIjsKICBueC5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9MDsgcmVuZGVyKCk7IH07CiAgYmFyLmFwcGVuZENoaWxkKG54KTsKICBwLmFwcGVuZENoaWxkKGJhcik7CiAgdmFyIGIgPSBlbCgiZGl2IiwiY2xwLXNway1ib2R5Iik7CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwsIlNwZWFraW5nIFRlc3QgSW5zdHJ1Y3Rpb25zIikpOwogIGIuYXBwZW5kQ2hpbGQocHIpOwogIHZhciB1bCA9IGVsKCJ1bCIpOwogIFUuaW50cm9Ob3Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB1bC5hcHBlbmRDaGlsZChlbCgibGkiLG51bGwseCkpOyB9KTsKICBiLmFwcGVuZENoaWxkKHVsKTsKICB2YXIgbWljcm93ID0gZWwoImRpdiIsImNscC1zcGstbWljcm93Iik7CiAgdmFyIG1idG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLm1pY0VuYWJsZSk7CiAgdmFyIG1zdCA9IGVsKCJzcGFuIiwiY2xwLXNway1taWNzdCIsIiIpOwogIG1idG4ub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICBtYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIGVuc3VyZU1pYyhmdW5jdGlvbihvayl7CiAgICAgIG1zdC5jbGFzc05hbWUgPSAiY2xwLXNway1taWNzdCAiKyhvaz8ib2siOiJiYWQiKTsKICAgICAgbXN0LmlubmVySFRNTCA9IG9rID8gIlx1MjcxNCAiK1UubWljUmVhZHkgOiAiXHUyNzE2ICIrVS5taWNCbG9ja2VkOwogICAgICBpZighb2spIG1idG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0pOwogIH07CiAgbWljcm93LmFwcGVuZENoaWxkKG1idG4pOyBtaWNyb3cuYXBwZW5kQ2hpbGQobXN0KTsKICBiLmFwcGVuZENoaWxkKG1pY3Jvdyk7CiAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLm1pY05vdGUpKTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFRlc3QrIiBcdTI1YjYiKTsKICBnby5zdHlsZS5mb250U2l6ZT0iMTVweCI7IGdvLnN0eWxlLnBhZGRpbmc9IjEycHggMjZweCI7CiAgZ28ub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTA7IHJlbmRlcigpOyB9OwogIGN0ci5hcHBlbmRDaGlsZChnbyk7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KCi8qIC0tLS0tLS0tLS0gdGFzayBwYW5lbCAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHRhc2tQYW5lbCh0KXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLHRhc2tUaXRsZSh0KSkpOwogIHZhciBtZXRhID0gZWwoInNwYW4iLCJtIiwgdC5waGFzZWQgPyBwaGFzZWRNZXRhKHQpIDogZm10TWV0YSh0KSk7CiAgYmFyLmFwcGVuZENoaWxkKG1ldGEpOwogIHZhciBueCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLW5leHQiLFUubmV4dCk7CiAgbngub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyID0gKFMuY3VyKzEgPCBELnRhc2tzLmxlbmd0aCkgPyBTLmN1cisxIDogOTk7IHJlbmRlcigpOyB9OwogIGJhci5hcHBlbmRDaGlsZChueCk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGlmKHQud2FybXVwKSBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWJhZGdlIixVLndhcm11cEJhZGdlKSk7CiAgaWYodC5waGFzZWQpIHJlbmRlclQ1KHQsYixtZXRhKTsKICBlbHNlIHJlbmRlclN0ZCh0LGIpOwogIGlmKHQudGlwcykgYi5hcHBlbmRDaGlsZChhY2NvcmRpb24odCkpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KZnVuY3Rpb24gcGhhc2VkTWV0YSh0KXsKICB2YXIgcGggPSBTLnBoYXNlW3Qua118fCIiOwogIGlmKHBoLmluZGV4T2YoImNob29zZSIpPT09MCkgcmV0dXJuICJQcmVwYXJhdGlvbjogPGI+Iit0LmNob29zZS5wcmVwKyIgc2Vjb25kczwvYj4iOwogIHJldHVybiAiUHJlcGFyYXRpb246IDxiPiIrdC5zcGVhay5wcmVwKyIgc2Vjb25kczwvYj4gJm5ic3A7UmVjb3JkaW5nOiA8Yj4iK3Quc3BlYWsucmVjKyIgc2Vjb25kczwvYj4iOwp9CmZ1bmN0aW9uIHByb21wdFJvdyh0ZXh0LCBsZWFkKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIGlmKGxlYWQpeyBib3guYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbGVhZCIsbGVhZCkpOyB9CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsKICBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsbnVsbCx0ZXh0KSk7CiAgYm94LmFwcGVuZENoaWxkKHByKTsKICByZXR1cm4gYm94Owp9CmZ1bmN0aW9uIHJlbmRlclN0ZCh0LGIpewogIGIuYXBwZW5kQ2hpbGQocHJvbXB0Um93KHQucHJvbXB0LCB0LnByb21wdExlYWQpKTsKICBpZih0LmNob29zZU9uZSl7CiAgICB2YXIgYyA9IGVsKCJkaXYiLCJjbHAtc3BrLWNob29zZTEiLCI8ZGl2IGNsYXNzPSdlJz5DaG9vc2UgT05FOjwvZGl2PjxkaXYgY2xhc3M9J2UnIHN0eWxlPSdtYXJnaW4tdG9wOjZweCc+RUlUSEVSPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzBdKyI8L2Rpdj48ZGl2IGNsYXNzPSdlJyBzdHlsZT0nbWFyZ2luLXRvcDo2cHgnPk9SPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzFdKyI8L2Rpdj4iKTsKICAgIGIuYXBwZW5kQ2hpbGQoYyk7CiAgfQogIGlmKHQuaW1nICYmIEQuaW1nc1t0LmltZ10pewogICAgdmFyIGltID0gZWwoImltZyIsImNscC1zcGstaW1nIik7IGltLnNyYyA9IEQuaW1nc1t0LmltZ107IGltLmFsdCA9IHQudHlwZUVuOwogICAgYi5hcHBlbmRDaGlsZChpbSk7CiAgfQogIGIuYXBwZW5kQ2hpbGQodGltZXJCbG9jayh0LmssIHQucHJlcCwgdC5yZWMsICJ0IikpOwp9CmZ1bmN0aW9uIHJlbmRlclQ1KHQsYixtZXRhRWwpewogIHZhciBwaCA9IFMucGhhc2VbdC5rXTsKICBpZihwaC5pbmRleE9mKCJjaG9vc2UiKT09PTApewogICAgYi5hcHBlbmRDaGlsZChwcm9tcHRSb3codC5jaG9vc2Uuc2l0dWF0aW9uKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLHQuY2hvb3NlLm5vdGUpKTsKICAgIHZhciBncmlkID0gZWwoImRpdiIsImNscC1zcGstb3B0cyIpOwogICAgdC5jaG9vc2Uub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG8saWR4KXsKICAgICAgdmFyIGNhcmQgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIisoUy50NWNob2ljZVt0LmtdPT09aWR4PyIgc2VsIjoiIikpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhvKSk7CiAgICAgIHZhciBwayA9IGVsKCJkaXYiLCJwaWNrIiwgUy50NWNob2ljZVt0LmtdPT09aWR4ID8gIlx1MjcxNCBTZWxlY3RlZCIgOiAiIik7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocGspOwogICAgICBjYXJkLm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICAgIFMudDVjaG9pY2VbdC5rXSA9IGlkeDsKICAgICAgICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLWNhcmQiKS5mb3JFYWNoKGZ1bmN0aW9uKGNkLGopewogICAgICAgICAgY2QuY2xhc3NOYW1lID0gImNscC1zcGstY2FyZCIrKGo9PT1pZHg\/IiBzZWwiOiIiKTsKICAgICAgICAgIGNkLnF1ZXJ5U2VsZWN0b3IoIi5waWNrIikudGV4dENvbnRlbnQgPSAoaj09PWlkeCk\/Ilx1MjcxNCBTZWxlY3RlZCI6IiI7CiAgICAgICAgfSk7CiAgICAgICAgY2J0bi5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICAgIH07CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICAgIGIuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWhpbnQiLFUuY2hvb3NlSGludCkpOwogICAgLyogY291bnRkb3duIGZvciBjaG9vc2UgcGhhc2UgKi8KICAgIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICAgIHZhciB0bSA9IGVsKCJkaXYiLCJjbHAtc3BrLXRpbWVyIik7CiAgICB0bS5hcHBlbmRDaGlsZChlbCgic3BhbiIsImljIiwiXHVkODNkXHVkZDUyIikpOwogICAgdmFyIGxiID0gZWwoImRpdiIpOyBsYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKSk7CiAgICB0bS5hcHBlbmRDaGlsZChsYik7CiAgICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHQuY2hvb3NlLnByZXApKTsKICAgIHRtLmFwcGVuZENoaWxkKG4pOwogICAgdHJvdy5hcHBlbmRDaGlsZCh0bSk7CiAgICBiLmFwcGVuZENoaWxkKHRyb3cpOwogICAgdmFyIGN0ciA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgdmFyIGNidG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuY29uZmlybUNob2ljZSk7CiAgICBjYnRuLnN0eWxlLmRpc3BsYXkgPSAoUy50NWNob2ljZVt0LmtdIT1udWxsKT8iaW5saW5lLWJsb2NrIjoibm9uZSI7CiAgICB2YXIgZ29TcGVhayA9IGZ1bmN0aW9uKCl7CiAgICAgIHN0b3BUaW1lcigpOwogICAgICBpZihTLnQ1Y2hvaWNlW3Qua109PW51bGwpIFMudDVjaG9pY2VbdC5rXSA9IDA7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJzcGVhayI7CiAgICAgIHJlbmRlcigpOwogICAgfTsKICAgIHN0YXJ0Lm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICBzdGFydC5kaXNhYmxlZCA9IHRydWU7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJjaG9vc2UtcnVuIjsKICAgICAgY291bnRkb3duKHQuY2hvb3NlLnByZXAsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH07CiAgICBjYnRuLm9uY2xpY2sgPSBnb1NwZWFrOwogICAgY3RyLmFwcGVuZENoaWxkKHN0YXJ0KTsgY3RyLmFwcGVuZENoaWxkKGNidG4pOwogICAgYi5hcHBlbmRDaGlsZChjdHIpOwogICAgaWYoUy5waGFzZVt0LmtdPT09ImNob29zZS1ydW4iKXsKICAgICAgc3RhcnQuZGlzYWJsZWQgPSB0cnVlOwogICAgICBjb3VudGRvd24odC5jaG9vc2UucHJlcCwgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQ9U3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH0KICB9IGVsc2UgewogICAgbWV0YUVsLmlubmVySFRNTCA9IHBoYXNlZE1ldGEodCk7CiAgICBiLmFwcGVuZENoaWxkKHByb21wdFJvdyh0LnNwZWFrLnByb21wdCkpOwogICAgdmFyIGdyaWQgPSBlbCgiZGl2IiwiY2xwLXNway1vcHRzIik7CiAgICB2YXIgb3RoZXIgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIHBsYWluIik7CiAgICBvdGhlci5hcHBlbmRDaGlsZChlbCgiZGl2IiwiaGQiLHQuc3BlYWsub3RoZXJMYWJlbCkpOwogICAgb3RoZXIuYXBwZW5kQ2hpbGQoaW1nVGl0bGVCdWxsZXRzKHQuc3BlYWsub3RoZXIpKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQob3RoZXIpOwogICAgdmFyIGNob3NlbiA9IHQuY2hvb3NlLm9wdGlvbnNbUy50NWNob2ljZVt0LmtdIT1udWxsID8gUy50NWNob2ljZVt0LmtdIDogMF07CiAgICB2YXIgbWluZSA9IGVsKCJkaXYiLCJjbHAtc3BrLWNhcmQgcGxhaW4gc2VsIik7CiAgICBtaW5lLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJoZCIsVS55b3VyQ2hvaWNlKSk7CiAgICBtaW5lLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhjaG9zZW4pKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQobWluZSk7CiAgICBiLmFwcGVuZENoaWxkKGdyaWQpOwogICAgYi5hcHBlbmRDaGlsZCh0aW1lckJsb2NrKHQuaywgdC5zcGVhay5wcmVwLCB0LnNwZWFrLnJlYywgInQ1cyIpKTsKICB9Cn0KZnVuY3Rpb24gaW1nVGl0bGVCdWxsZXRzKG8pewogIHZhciBib3ggPSBlbCgiZGl2Iik7CiAgaWYoby5pbWcgJiYgRC5pbWdzW28uaW1nXSl7IHZhciBpbSA9IGVsKCJpbWciKTsgaW0uc3JjID0gRC5pbWdzW28uaW1nXTsgaW0uYWx0ID0gby50aXRsZTsgYm94LmFwcGVuZENoaWxkKGltKTsgfQogIGJveC5hcHBlbmRDaGlsZChlbCgiZGl2IiwidHQiLG8udGl0bGUpKTsKICB2YXIgdWwgPSBlbCgidWwiKTsKICBvLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgYm94LmFwcGVuZENoaWxkKHVsKTsKICByZXR1cm4gYm94Owp9CgovKiAtLS0tLS0tLS0tIHByZXAvcmVjb3JkIGJsb2NrIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gdGltZXJCbG9jayhrZXksIHByZXBTZWNzLCByZWNTZWNzLCBtb2RlKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICB2YXIgdG0gPSBlbCgiZGl2IiwiY2xwLXNway10aW1lciIpOwogIHZhciBpYyA9IGVsKCJzcGFuIiwiaWMiLCJcdWQ4M2RcdWRkNTIiKTsKICB2YXIgbGIgPSBlbCgiZGl2Iik7IHZhciBsYnQgPSBlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKTsgbGIuYXBwZW5kQ2hpbGQobGJ0KTsKICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHByZXBTZWNzKSk7CiAgdG0uYXBwZW5kQ2hpbGQoaWMpOyB0bS5hcHBlbmRDaGlsZChsYik7IHRtLmFwcGVuZENoaWxkKG4pOwogIHRyb3cuYXBwZW5kQ2hpbGQodG0pOyBib3guYXBwZW5kQ2hpbGQodHJvdyk7CiAgdmFyIHNwZWFrbm93ID0gZWwoImRpdiIsImNscC1zcGstc3BlYWtub3ciLCIiKTsgYm94LmFwcGVuZENoaWxkKHNwZWFrbm93KTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7IGJveC5hcHBlbmRDaGlsZChjdHIpOwogIHZhciByZXZpZXdTbG90ID0gZWwoImRpdiIpOyBib3guYXBwZW5kQ2hpbGQocmV2aWV3U2xvdCk7CiAgdmFyIG1pY25vdGUgPSBlbCgiZGl2Iik7IGJveC5hcHBlbmRDaGlsZChtaWNub3RlKTsKCiAgZnVuY3Rpb24gc2hvd0lkbGUoKXsKICAgIGN0ci5pbm5lckhUTUwgPSAiIjsgc3BlYWtub3cudGV4dENvbnRlbnQgPSAiIjsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIjsgbGJ0LnRleHRDb250ZW50ID0gVS5wcmVwVGl0bGU7IGljLnRleHRDb250ZW50ID0gIlx1ZDgzZFx1ZGQ1MiI7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcocHJlcFNlY3MpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgc3RhcnQub25jbGljayA9IHN0YXJ0UHJlcDsKICAgIGN0ci5hcHBlbmRDaGlsZChzdGFydCk7CiAgICBpZihTLnJlY3Nba2V5XSkgc2hvd1JldmlldyhmYWxzZSk7CiAgfQogIGZ1bmN0aW9uIHN0YXJ0UHJlcCgpewogICAgZW5zdXJlTWljKGZ1bmN0aW9uKCl7CiAgICAgIGN0ci5pbm5lckhUTUwgPSAiIjsKICAgICAgdmFyIHNraXAgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuc2tpcFByZXApOwogICAgICBza2lwLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBzdG9wVGltZXIoKTsgc3RhcnRSZWMoKTsgfTsKICAgICAgY3RyLmFwcGVuZENoaWxkKHNraXApOwogICAgICBjb3VudGRvd24ocHJlcFNlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmdW5jdGlvbigpeyBzdGFydFJlYygpOyB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBzdGFydFJlYygpewogICAgYmVlcCgyKTsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIHJlYyI7CiAgICBpYy5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2NscC1zcGstZG90Jz48L3NwYW4+IjsKICAgIG4udGV4dENvbnRlbnQgPSBTdHJpbmcocmVjU2Vjcyk7CiAgICBjdHIuaW5uZXJIVE1MID0gIiI7CiAgICB2YXIgc3RvcHBlZCA9IGZhbHNlOwogICAgdmFyIGhhdmVNaWMgPSAoUy5taWNTdGF0ZT09PSJvayIgJiYgUy5zdHJlYW0pOwogICAgbGJ0LnRleHRDb250ZW50ID0gaGF2ZU1pYyA\/IFUucmVjVGl0bGUgOiBVLnRpbWVyT25seTsKICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gVS5zcGVha05vdzsKICAgIG1pY25vdGUuaW5uZXJIVE1MID0gaGF2ZU1pYyA\/ICIiIDogIjxkaXYgY2xhc3M9J2NscC1zcGstbWljJz4iK1UubWljQmxvY2tlZCsiPC9kaXY+IjsKICAgIHZhciB0MCA9IERhdGUubm93KCk7CiAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24oKXsKICAgICAgaWYoc3RvcHBlZCkgcmV0dXJuOyBzdG9wcGVkID0gdHJ1ZTsKICAgICAgc3RvcFRpbWVyKCk7IGJlZXAoMSk7CiAgICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gIiI7CiAgICAgIHZhciBzZWNzID0gTWF0aC5taW4ocmVjU2VjcywgTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS10MCkvMTAwMCkpOwogICAgICBpZihoYXZlTWljICYmIFMucmVjb3JkZXIpewogICAgICAgIFMucmVjb3JkZXIub25zdG9wID0gZnVuY3Rpb24oKXsKICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoUy5jaHVua3MsIFMubWltZT97dHlwZTpTLm1pbWV9OnVuZGVmaW5lZCk7CiAgICAgICAgICBpZihTLnJlY3Nba2V5XSAmJiBTLnJlY3Nba2V5XS51cmwpeyB0cnl7IFVSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tleV0udXJsKTsgfWNhdGNoKGUpe30gfQogICAgICAgICAgUy5yZWNzW2tleV0gPSB7IGJsb2I6IGJsb2IsIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgc2Vjczogc2VjcyB9OwogICAgICAgICAgUy5yZWNvcmRlciA9IG51bGw7CiAgICAgICAgICBzaG93SWRsZSgpOyBzaG93UmV2aWV3KHRydWUpOwogICAgICAgIH07CiAgICAgICAgdHJ5eyBTLnJlY29yZGVyLnN0b3AoKTsgfWNhdGNoKGUpeyBTLnJlY3Nba2V5XSA9IHtibG9iOm51bGwsdXJsOm51bGwsc2VjczpzZWNzfTsgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsgfQogICAgICB9IGVsc2UgewogICAgICAgIFMucmVjc1trZXldID0geyBibG9iOm51bGwsIHVybDpudWxsLCBzZWNzOiBzZWNzIH07CiAgICAgICAgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsKICAgICAgfQogICAgfTsKICAgIGlmKGhhdmVNaWMpewogICAgICBTLmNodW5rcyA9IFtdOwogICAgICB0cnl7CiAgICAgICAgUy5yZWNvcmRlciA9IFMubWltZSA\/IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtLHttaW1lVHlwZTpTLm1pbWV9KSA6IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtKTsKICAgICAgICBTLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IGZ1bmN0aW9uKGV2KXsgaWYoZXYuZGF0YSAmJiBldi5kYXRhLnNpemUpIFMuY2h1bmtzLnB1c2goZXYuZGF0YSk7IH07CiAgICAgICAgUy5yZWNvcmRlci5zdGFydCgpOwogICAgICB9Y2F0Y2goZSl7IFMucmVjb3JkZXIgPSBudWxsOyBoYXZlTWljID0gZmFsc2U7IGxidC50ZXh0Q29udGVudCA9IFUudGltZXJPbmx5OyB9CiAgICB9CiAgICB2YXIgc3RvcCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biB3YXJuIixVLnN0b3BSZWMpOwogICAgc3RvcC5vbmNsaWNrID0gZmluaXNoOwogICAgY3RyLmFwcGVuZENoaWxkKHN0b3ApOwogICAgY291bnRkb3duKHJlY1NlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmaW5pc2gpOwogIH0KICBmdW5jdGlvbiBzaG93UmV2aWV3KHNjcm9sbFRvKXsKICAgIHZhciByID0gUy5yZWNzW2tleV07IGlmKCFyKSByZXR1cm47CiAgICByZXZpZXdTbG90LmlubmVySFRNTCA9ICIiOwogICAgdmFyIHJ2ID0gZWwoImRpdiIsImNscC1zcGstcmV2aWV3Iik7CiAgICBydi5hcHBlbmRDaGlsZChlbCgiZGl2Iiwib2siLCJcdTI3MTQgIitVLnJlY29yZGVkKyIgKCIrci5zZWNzKyJzKSIpKTsKICAgIGlmKHIudXJsKXsKICAgICAgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7CiAgICAgIHJ2LmFwcGVuZENoaWxkKGF1KTsKICAgICAgdmFyIHJvdyA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgICB2YXIgZGwgPSBlbCgiYSIsImNscC1zcGstYnRuIixVLmRvd25sb2FkKTsKICAgICAgZGwuaHJlZiA9IHIudXJsOyBkbC5kb3dubG9hZCA9ICJjZWxwaXAtcyIrRC5zZXQrInQiK0QudGVzdCsiLXRhc2siKyhrZXk9PT0idyI\/IjAiOmtleS5yZXBsYWNlKCJ0IiwiIikpKyIuIitTLmV4dDsKICAgICAgcm93LmFwcGVuZENoaWxkKGRsKTsKICAgICAgcnYuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0KICAgIHJldmlld1Nsb3QuYXBwZW5kQ2hpbGQocnYpOwogICAgaWYoc2Nyb2xsVG8peyB0cnl7IHJ2LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIn0pOyB9Y2F0Y2goZSl7fSB9CiAgfQogIHNob3dJZGxlKCk7CiAgcmV0dXJuIGJveDsKfQoKLyogLS0tLS0tLS0tLSB0aXBzL3NhbXBsZXMgYWNjb3JkaW9uIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gYWNjb3JkaW9uKHQpewogIHZhciBhY2MgPSBlbCgiZGl2IiwiY2xwLXNway1hY2MiKTsKICB2YXIgYnRuID0gZWwoImJ1dHRvbiIsbnVsbCxVLnRpcHNUb2dnbGUpOwogIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXsgYWNjLmNsYXNzTmFtZSA9IGFjYy5jbGFzc05hbWUuaW5kZXhPZigib3BlbiIpPi0xID8gImNscC1zcGstYWNjIiA6ICJjbHAtc3BrLWFjYyBvcGVuIjsgfTsKICBhY2MuYXBwZW5kQ2hpbGQoYnRuKTsKICB2YXIgYm9keSA9IGVsKCJkaXYiLCJjbHAtc3BrLWFjY2JvZHkiKTsKICB2YXIgdGFicyA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnMiKTsKICB2YXIgcGFuZXMgPSBbXTsKICBmdW5jdGlvbiBhZGRUYWIobGFiZWwsIHBhbmVCdWlsZGVyKXsKICAgIHZhciBpID0gcGFuZXMubGVuZ3RoOwogICAgdmFyIHRiID0gZWwoImJ1dHRvbiIsImNscC1zcGstdGFiIisoaT09PTA\/IiBvbiI6IiIpLGxhYmVsKTsKICAgIHZhciBwbiA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnBhbmUiKyhpPT09MD8iIG9uIjoiIikpOwogICAgcGFuZUJ1aWxkZXIocG4pOwogICAgdGIub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgIHRhYnMucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFiIikuZm9yRWFjaChmdW5jdGlvbih4LGopeyB4LmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRhYiIrKGo9PT1pPyIgb24iOiIiKTsgfSk7CiAgICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFicGFuZSIpLmZvckVhY2goZnVuY3Rpb24oeCxqKXsgeC5jbGFzc05hbWUgPSAiY2xwLXNway10YWJwYW5lIisoaj09PWk\/IiBvbiI6IiIpOyB9KTsKICAgIH07CiAgICB0YWJzLmFwcGVuZENoaWxkKHRiKTsgcGFuZXMucHVzaChwbik7CiAgfQogIGFkZFRhYihVLnRhYlRpcHMsIGZ1bmN0aW9uKHBuKXsKICAgIHZhciB1bCA9IGVsKCJ1bCIpOwogICAgdC50aXBzLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZCh1bCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IixudWxsLCI8Yj4iK1UudXNlZnVsUGhyYXNlcysiOjwvYj4iKSk7CiAgICB2YXIgcGggPSBlbCgiZGl2IiwiY2xwLXNway1waHIiKTsKICAgIHQudGlwcy5waHJhc2VzLmZvckVhY2goZnVuY3Rpb24oeCl7IHBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZChwaCk7CiAgfSk7CiAgaWYodC5zNikgYWRkVGFiKFUudGFiUzYsIGZ1bmN0aW9uKHBuKXsgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstc2FtcGxlIHM2Iix0LnM2KSk7IH0pOwogIGlmKHQuczkpIGFkZFRhYihVLnRhYlM5LCBmdW5jdGlvbihwbil7IHBuLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLXNhbXBsZSIsdC5zOSkpOyB9KTsKICBpZighdC53YXJtdXApIGFkZFRhYihVLnRhYlJ1YnJpYywgZnVuY3Rpb24ocG4pewogICAgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCxVLnJ1YnJpY05vdGUpKTsKICAgIHZhciB0YiA9IGVsKCJ0YWJsZSIsImNscC1zcGstcnViIik7CiAgICBpZighUy5ydWJyaWNbdC5rXSkgUy5ydWJyaWNbdC5rXSA9IFswLDAsMCwwXTsKICAgIHZhciBlc3REID0gZWwoImRpdiIsImNscC1zcGstZXN0IiwiIik7CiAgICBVLnJ1YnJpY0NyaXQuZm9yRWFjaChmdW5jdGlvbihjcixjaSl7CiAgICAgIHZhciB0ciA9IGVsKCJ0ciIpOwogICAgICB0ci5hcHBlbmRDaGlsZChlbCgidGQiLG51bGwsY3IpKTsKICAgICAgdmFyIHRkID0gZWwoInRkIik7IHRkLnN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsgdGQuc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgZm9yKHZhciBzMj0xO3MyPD01O3MyKyspewogICAgICAgIChmdW5jdGlvbihzdil7CiAgICAgICAgICB2YXIgc3AgPSBlbCgic3BhbiIsImNscC1zcGstc3RhciIrKFMucnVicmljW3Qua11bY2ldPj1zdj8iIG9uIjoiIiksIlx1MjYwNSIpOwogICAgICAgICAgc3Aub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIFMucnVicmljW3Qua11bY2ldID0gc3Y7CiAgICAgICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLXN0YXIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgsail7IHguY2xhc3NOYW1lID0gImNscC1zcGstc3RhciIrKGo8c3Y\/IiBvbiI6IiIpOyB9KTsKICAgICAgICAgICAgdXBkKCk7CiAgICAgICAgICB9OwogICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ApOwogICAgICAgIH0pKHMyKTsKICAgICAgfQogICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICAgIH0pOwogICAgcG4uYXBwZW5kQ2hpbGQodGIpOwogICAgcG4uYXBwZW5kQ2hpbGQoZXN0RCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLmVzdERpc2NsYWltZXIpKTsKICAgIGZ1bmN0aW9uIHVwZCgpewogICAgICB2YXIgYXJyID0gUy5ydWJyaWNbdC5rXTsgdmFyIGRvbmUgPSBhcnIuZXZlcnkoZnVuY3Rpb24oeCl7cmV0dXJuIHg+MDt9KTsKICAgICAgZXN0RC50ZXh0Q29udGVudCA9IGRvbmUgPyAoVS5lc3RpbWF0ZSsiICIrZXN0VGV4dChhcnIucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErYjt9LDApLzQpKSA6ICIiOwogICAgfQogICAgdXBkKCk7CiAgfSk7CiAgYm9keS5pbnNlcnRCZWZvcmUodGFicywgYm9keS5maXJzdENoaWxkKTsKICBwYW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHBuKXsgYm9keS5hcHBlbmRDaGlsZChwbik7IH0pOwogIGFjYy5hcHBlbmRDaGlsZChib2R5KTsKICByZXR1cm4gYWNjOwp9CgovKiAtLS0tLS0tLS0tIGVuZCBzY3JlZW4gLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBlbmRTY3JlZW4oKXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIGNscC1zcGstZW5kIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyBcdTIwMTQgIitVLmVuZFRpdGxlKSk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCwiPGI+IitVLmVuZFRpdGxlKyI8L2I+ICIrVS5lbmRTdWIpKTsKICB2YXIgdGIgPSBlbCgidGFibGUiKTsKICB2YXIgdGhyID0gZWwoInRyIik7IFsiVGFzayIsIlR5cGUiLCJSZWNvcmRpbmciLCIiXS5mb3JFYWNoKGZ1bmN0aW9uKGgpeyB0aHIuYXBwZW5kQ2hpbGQoZWwoInRoIixudWxsLGgpKTsgfSk7CiAgdGIuYXBwZW5kQ2hpbGQodGhyKTsKICB2YXIgbnJlYyA9IDA7CiAgRC50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7CiAgICB2YXIgdHIgPSBlbCgidHIiKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCwiPGI+IisodC53YXJtdXA\/IlciOnQubnVtKSsiPC9iPiIpKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCx0LnR5cGVFbikpOwogICAgdmFyIHIgPSBTLnJlY3NbdC5rXTsKICAgIHZhciB0ZCA9IGVsKCJ0ZCIpOwogICAgaWYociAmJiByLnVybCl7IG5yZWMrKzsgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7IHRkLmFwcGVuZENoaWxkKGF1KTsgfQogICAgZWxzZSBpZihyKXsgbnJlYysrOyB0ZC50ZXh0Q29udGVudCA9IHIuc2VjcysicyAoIitVLnRpbWVyT25seSsiKSI7IH0KICAgIGVsc2UgdGQuaW5uZXJIVE1MID0gIjxzcGFuIHN0eWxlPSdjb2xvcjojYzYyODI4Jz4iK1UuZW5kTm9SZWMrIjwvc3Bhbj4iOwogICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgdmFyIHRkMiA9IGVsKCJ0ZCIpOwogICAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIiwiXHUyMTkyIik7CiAgICBnby5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH07CiAgICB0ZDIuYXBwZW5kQ2hpbGQoZ28pOwogICAgdHIuYXBwZW5kQ2hpbGQodGQyKTsKICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICB9KTsKICBiLmFwcGVuZENoaWxkKHRiKTsKICAvKiBydWJyaWMgYXZnICovCiAgdmFyIHZhbHMgPSBbXTsKICBPYmplY3Qua2V5cyhTLnJ1YnJpYykuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIGE9Uy5ydWJyaWNba107IGlmKGEgJiYgYS5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4geD4wO30pKSB2YWxzLnB1c2goYS5yZWR1Y2UoZnVuY3Rpb24oeCx5KXtyZXR1cm4geCt5O30sMCkvNCk7IH0pOwogIGlmKHZhbHMubGVuZ3RoKXsKICAgIHZhciBhdmcgPSB2YWxzLnJlZHVjZShmdW5jdGlvbihhLGMpe3JldHVybiBhK2M7fSwwKS92YWxzLmxlbmd0aDsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstZXN0IixVLmVzdGltYXRlKyIgIitlc3RUZXh0KGF2ZykrIiAoIit2YWxzLmxlbmd0aCsiIHRhc2socykgc2VsZi1yYXRlZCkiKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLFUuZXN0RGlzY2xhaW1lcikpOwogIH0KICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIHJlZG8gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuZW5kUmVkbyk7CiAgcmVkby5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgIE9iamVjdC5rZXlzKFMucmVjcykuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYoUy5yZWNzW2tdJiZTLnJlY3Nba10udXJsKXsgdHJ5e1VSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tdLnVybCk7fWNhdGNoKGUpe30gfSB9KTsKICAgIFMucmVjcyA9IHt9OyBTLnJ1YnJpYyA9IHt9OyBTLnQ1Y2hvaWNlID0ge307CiAgICBELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkPyJjaG9vc2UtaWRsZSI6ImlkbGUiOyB9KTsKICAgIFMuY3VyID0gLTE7IHJlbmRlcigpOwogIH07CiAgdmFyIHQyID0gZWwoImEiLCJjbHAtc3BrLWJ0biBwcmkiLFUuZW5kVDIrIiAiKyhELnRlc3Q9PT0xPzI6MSkrIiBcdTIxOTIiKTsgdDIuaHJlZiA9IEQub3RoZXJVcmw7CiAgdmFyIGh1YiA9IGVsKCJhIiwiY2xwLXNway1idG4iLFUuZW5kSHViKTsgaHViLmhyZWYgPSAiL2NlbHBpcC8iOwogIGN0ci5hcHBlbmRDaGlsZChyZWRvKTsgY3RyLmFwcGVuZENoaWxkKHQyKTsgY3RyLmFwcGVuZENoaWxkKGh1Yik7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbWljIixVLm1pY05vdGUpKTsKICBwLmFwcGVuZENoaWxkKGIpOwogIHJldHVybiBwOwp9CgovKiBleHBvc2UgZm9yIHRlc3RzICovCndpbmRvdy5DTFBTUEsgPSB7IHN0YXRlOiBTLCBkYXRhOiBELCBnb3RvOiBmdW5jdGlvbihpKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH0sIHJlbmRlcjogcmVuZGVyIH07CnJlbmRlcigpOwp9KSgpOwo=\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Speaking Set 9 Practice Test 1: all 8 official-style tasks with on-screen prep and recording timers, sample responses and self-assessment tips. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6386","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6386"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6386\/revisions"}],"predecessor-version":[{"id":6514,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6386\/revisions\/6514"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}