{"id":6450,"date":"2026-07-11T06:38:30","date_gmt":"2026-07-11T06:38:30","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-11-test-1-speaking\/"},"modified":"2026-07-12T03:16:16","modified_gmt":"2026-07-12T03:16:16","slug":"celpip-set-11-test-1-speaking","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-11-test-1-speaking\/","title":{"rendered":"CELPIP Speaking \u2014 Set 11 \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(\"d2luZG93LkNMUFNQS19EQVRBPXsic2V0IjoxMSwidGVzdCI6MSwidGl0bGUiOiJDRUxQSVAgU3BlYWtpbmcgXHUyMDE0IFNldCAxMSBcdTAwYjcgUHJhY3RpY2UgVGVzdCAxIiwiaGVhZGVyIjoiUHJhY3RpY2UgVGVzdCAxIiwiaW1ncyI6eyJzY2VuZSI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9zMTF0MS1zY2VuZS5qcGciLCJvcHRBIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3MxMXQxLW9wdC1hLmpwZyIsIm9wdEIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczExdDEtb3B0LWIuanBnIiwib3B0T3RoZXIiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczExdDEtb3B0LW90aGVyLmpwZyIsInVudXN1YWwiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczExdDEtdW51c3VhbC5qcGcifSwib3RoZXJVcmwiOiIvY2VscGlwLXNldC0xMS10ZXN0LTItc3BlYWtpbmcvIiwidGFza3MiOlt7ImsiOiJ3IiwibnVtIjowLCJ0eXBlRW4iOiJTcGVha2luZyBQcmFjdGljZSBUYXNrIiwicHJlcCI6MzAsInJlYyI6NjAsIndhcm11cCI6dHJ1ZSwicHJvbXB0IjoiVGFsayBhYm91dCBvbmUgb2YgeW91ciBiZXN0IGZyaWVuZHMuIiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiVGhlIFByYWN0aWNlIFRhc2sgKHdhcm0tdXApIGlzIE5PVCBzY29yZWQgXHUyMDE0IGl0IGlzIGhlcmUgdG8gaGVscCB5b3UgZ2V0IHVzZWQgdG8gdGhlIGNvbnRyb2xzIGFuZCB3YXJtIHVwIHlvdXIgdm9pY2UuIiwiU3BlYWsgbmF0dXJhbGx5IGFib3V0IGEgYmVzdCBmcmllbmQ6IHRoZWlyIG5hbWUsIGhvdyB5b3UgbWV0LCB0aGVpciBwZXJzb25hbGl0eSwgYSBtZW1vcnkgeW91IHNoYXJlLiIsIlVzZSBpdCB0byBhZGp1c3QgeW91ciBwb3N0dXJlLCBtaWNyb3Bob25lIGRpc3RhbmNlLCBhbmQgc3BlYWtpbmcgcGFjZS4iXSwicGhyYXNlcyI6WyJNeSBiZXN0IGZyaWVuZCdzIG5hbWUgaXNcdTIwMjYiLCJXZSBtZXQgd2hlblx1MjAyNiIsIldoYXQgSSBsaWtlIG1vc3QgYWJvdXQgaGltL2hlciBpc1x1MjAyNiJdfSwiczYiOm51bGwsInM5IjpudWxsfSx7ImsiOiJ0MSIsIm51bSI6MSwidHlwZUVuIjoiR2l2aW5nIEFkdmljZSIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJZb3VyIGZyaWVuZCB3b3VsZCBsaWtlIHRvIGdldCBhIHBldC4gU2hlIGxpdmVzIGluIGFuIGFwYXJ0bWVudCBidWlsZGluZyB3aXRoIGEgcm9vbW1hdGUuIEdpdmUgaGVyIGFkdmljZSBvbiB0aGluZ3MgdG8gZG8gd2hlbiBnZXR0aW5nIGEgcGV0IGluIGhlciBzaXR1YXRpb24uIiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiT3BlbmluZzogZ3JlZXQgeW91ciBmcmllbmQgYW5kIHJlc3RhdGUgdGhlIHNpdHVhdGlvbiBpbiBvbmUgc2VudGVuY2UuIiwiQm9keTogZ2l2ZSAyXHUyMDEzMyBwaWVjZXMgb2YgYWR2aWNlLCBlYWNoIHdpdGggYSByZWFzb24gb3IgZXhhbXBsZSAoRmlyc3RcdTIwMjYsIGJlY2F1c2VcdTIwMjY7IEFub3RoZXIgaWRlYSBpc1x1MjAyNikuIiwiQ2xvc2luZzogZW5jb3VyYWdlIHRoZW0gYW5kIHdpc2ggdGhlbSBsdWNrLiIsIkFkdmlzZSB5b3VyIGZyaWVuZCBvbiBnZXR0aW5nIGEgcGV0IGFzIGFuIGFwYXJ0bWVudCByZW50ZXIgd2l0aCBhIHJvb21tYXRlOiBmaXJzdCBDSEVDSyB0aGUgbGVhc2UgYW5kIGJ1aWxkaW5nIHJ1bGVzIChtYW55IHBsYWNlcyBiYW4gcGV0cyBvciBhc2sgZm9yIGEgZGVwb3NpdCk7IEFTSyB0aGUgcm9vbW1hdGUncyBwZXJtaXNzaW9uIGFuZCBhYm91dCBhbGxlcmdpZXMgYmVmb3JlIGRlY2lkaW5nOyBwaWNrIGEgcGV0IHRoYXQgc3VpdHMgYSBzbWFsbCBzcGFjZSAoYSBjYXQsIGEgc21hbGwgZG9nLCBvciBldmVuIGEgZmlzaCBvciBoYW1zdGVyIGluc3RlYWQgb2YgYSBiaWcsIGFjdGl2ZSBkb2cpOyBidWRnZXQgZm9yIGZvb2QsIHRveXMgYW5kIHZldCBiaWxsczsgYW5kIGFncmVlIHdobyBjb3ZlcnMgd2Fsa3MgYW5kIGNsZWFuaW5nIHdoZW4gYm90aCBvZiB5b3UgYXJlIGF0IHdvcmsuIl0sInBocmFzZXMiOlsiSWYgSSB3ZXJlIHlvdSwgSSdkXHUyMDI2IiwiWW91IHNob3VsZCBkZWZpbml0ZWx5XHUyMDI2IiwiQW5vdGhlciBvcHRpb24gaXMgdG9cdTIwMjYiLCJUcnVzdCBtZSwgeW91IHdvbid0IHJlZ3JldCBpdC4iXX0sInM2IjoiSGV5IFNhcmEsIHNvIHlvdSB3YW50IHRvIGdldCBhIHBldCwgdGhhdCBpcyBzbyBleGNpdGluZyEgQnV0IGJlY2F1c2UgeW91IGxpdmUgaW4gYW4gYXBhcnRtZW50IHdpdGggYSByb29tbWF0ZSwgbGV0IG1lIGdpdmUgeW91IHNvbWUgYWR2aWNlIGZpcnN0LiBOdW1iZXIgb25lLCBjaGVjayB5b3VyIGxlYXNlIGFuZCB0aGUgYnVpbGRpbmcgcnVsZXMuIE1hbnkgYXBhcnRtZW50cyBkbyBub3QgYWxsb3cgcGV0cywgb3IgdGhleSBhc2sgZm9yIGEgcGV0IGRlcG9zaXQsIHNvIHJlYWQgdGhlIHJ1bGVzIGJlZm9yZSB5b3UgZmFsbCBpbiBsb3ZlIHdpdGggYSBwdXBweS4gTnVtYmVyIHR3bywgYW5kIHRoaXMgaXMgdmVyeSBpbXBvcnRhbnQsIHRhbGsgdG8geW91ciByb29tbWF0ZS4gSXQgaXMgaGVyIGhvbWUgdG9vLCBzbyBhc2sgaWYgc2hlIGlzIG9rYXkgd2l0aCBhIHBldCwgYW5kIGFzayBpZiBzaGUgaGFzIGFueSBhbGxlcmdpZXMuIFNvbWUgcGVvcGxlIGFyZSByZWFsbHkgYWxsZXJnaWMgdG8gY2F0cyBvciBkb2dzLiBOdW1iZXIgdGhyZWUsIGNob29zZSB0aGUgcmlnaHQgcGV0IGZvciBhIHNtYWxsIHNwYWNlLiBBIGJpZyBkb2cgbmVlZHMgYSBnYXJkZW4gYW5kIGxvdHMgb2Ygd2Fsa3MsIGJ1dCBhbiBhcGFydG1lbnQgaXMgc21hbGwsIHNvIG1heWJlIGEgY2F0LCBhIHNtYWxsIGRvZywgb3IgZXZlbiBhIGZpc2ggb3IgYSBoYW1zdGVyIGlzIGJldHRlci4gTnVtYmVyIGZvdXIsIHRoaW5rIGFib3V0IG1vbmV5LiBGb29kLCB0b3lzLCBhbmQgdGhlIHZldCBjYW4gYmUgZXhwZW5zaXZlLCBzbyBtYWtlIGEgc21hbGwgYnVkZ2V0LiBBbmQgbGFzdCwgcGxhbiB3aG8gd2lsbCB3YWxrIHRoZSBkb2cgb3IgY2xlYW4gd2hlbiB5b3UgYXJlIGJvdGggYXQgd29yay4gSWYgeW91IG9yZ2FuaXplIHRoZXNlIHRoaW5ncyBmaXJzdCwgeW91IGFuZCB5b3VyIHJvb21tYXRlIGFuZCB5b3VyIG5ldyBwZXQgd2lsbCBhbGwgYmUgaGFwcHkuIEdvb2QgbHVjayEiLCJzOSI6IlNhcmEsIGhvdyBleGNpdGluZyB0aGF0IHlvdSBhcmUgdGhpbmtpbmcgb2YgZ2V0dGluZyBhIHBldCEgQnV0IHNpbmNlIHlvdSBhcmUgcmVudGluZyBhbiBhcGFydG1lbnQgYW5kIHNoYXJpbmcgaXQgd2l0aCBhIHJvb21tYXRlLCBsZXQgbWUgdGFsayB5b3UgdGhyb3VnaCBhIGZldyB0aGluZ3MgdG8gc29ydCBvdXQgZmlyc3QsIHNvIHRoaXMgZW5kcyBoYXBwaWx5IGZvciBldmVyeW9uZS4gU3RhcnQgd2l0aCB0aGUgcGFwZXJ3b3JrLCB1bnJvbWFudGljIEkga25vdywgYnV0IGVzc2VudGlhbDogZGlnIG91dCB5b3VyIGxlYXNlIGFuZCBjaGVjayB0aGUgYnVpbGRpbmcncyBwZXQgcG9saWN5IGJlZm9yZSB5b3UgZG8gYW55dGhpbmcgZWxzZS4gQSBzdXJwcmlzaW5nIG51bWJlciBvZiBhcGFydG1lbnRzIGVpdGhlciBiYW4gcGV0cyBvdXRyaWdodCBvciBkZW1hbmQgYSBoZWZ0eSBkZXBvc2l0LCBhbmQgeW91IGRvIG5vdCB3YW50IHRvIGJyaW5nIGFuIGFuaW1hbCBob21lIG9ubHkgdG8gYmUgdG9sZCBpdCBoYXMgdG8gZ28uIE5leHQsIGFuZCB0aGlzIG9uZSBpcyBub24tbmVnb3RpYWJsZSwgc2l0IGRvd24gd2l0aCB5b3VyIHJvb21tYXRlLiBJdCBpcyBoZXIgc3BhY2UgdG9vLCBzbyB5b3UgbmVlZCBoZXIgZ2VudWluZSBidXktaW4sIGFuZCB5b3UgbXVzdCBhc2sgd2hldGhlciBzaGUgaGFzIGFueSBhbGxlcmdpZXMsIGJlY2F1c2UgYSBjYXQgb3IgZG9nIGNhbiBtYWtlIGEgc2hhcmVkIGZsYXQgbWlzZXJhYmxlIGZvciBzb21lb25lIHdobyByZWFjdHMgdG8gZnVyLiBUaGlyZCwgbWF0Y2ggdGhlIHBldCB0byB0aGUgc3BhY2UuIEEgYmlnLCBlbmVyZ2V0aWMgZG9nIHdpbGwgYmUgY2xpbWJpbmcgdGhlIHdhbGxzIGluIGEgc21hbGwgYXBhcnRtZW50LCB3aGVyZWFzIGEgY2F0LCBhIHNtYWxsIGJyZWVkLCBvciBldmVuIGEgbG93LW1haW50ZW5hbmNlIG9wdGlvbiBsaWtlIGEgZmlzaCBvciBhIGhhbXN0ZXIgc3VpdHMgaW5kb29yIGxpZmUgZmFyIGJldHRlci4gRm91cnRoLCBiZSBob25lc3QgYWJvdXQgdGhlIGJ1ZGdldDogZm9vZCwgbGl0dGVyLCB0b3lzLCB2YWNjaW5hdGlvbnMgYW5kIHRoZSBvY2Nhc2lvbmFsIHZldCBiaWxsIGFkZCB1cCBmYXN0LCBhbmQgcGV0IGluc3VyYW5jZSBpcyB3b3J0aCBjb25zaWRlcmluZy4gRmluYWxseSwgYWdyZWUgb24gYSByb3V0aW5lIGluIGFkdmFuY2UsIHdobyBoYW5kbGVzIHRoZSB3YWxrcywgZmVlZGluZyBhbmQgY2xlYW5pbmcgd2hlbiB5b3UgYXJlIGJvdGggYXQgd29yaywgc28gdGhlIHJlc3BvbnNpYmlsaXR5IGRvZXMgbm90IHF1aWV0bHkgbGFuZCBvbiBvbmUgb2YgeW91LiBHZXQgdGhvc2UgZml2ZSB0aGluZ3Mgc3F1YXJlZCBhd2F5LCBhbmQgeW91IHdpbGwgYmUgc2V0IHVwIGZvciB5ZWFycyBvZiBoYXBweSBwZXQgb3duZXJzaGlwLiJ9LHsiayI6InQyIiwibnVtIjoyLCJ0eXBlRW4iOiJUYWxraW5nIGFib3V0IGEgUGVyc29uYWwgRXhwZXJpZW5jZSIsInByZXAiOjMwLCJyZWMiOjYwLCJwcm9tcHQiOiJUYWxrIGFib3V0IGEgdGltZSB3aGVuIHlvdSByZWNlaXZlZCBhIHNwZWNpYWwgbGV0dGVyIG9yIGVtYWlsLiBNYXliZSB5b3UgcmVjZWl2ZWQgYW4gZW1haWwgZnJvbSBhIGZyaWVuZCB3aXRoIGdvb2QgbmV3cywgYSBsZXR0ZXIgb2YgYWNjZXB0YW5jZSBmcm9tIGEgc2Nob29sIG9yIGNsdWIsIG9yIGV2ZW4gYSBwb3N0Y2FyZCBmcm9tIGFub3RoZXIgY291bnRyeS4gV2hvIHNlbnQgaXQsIHdoYXQgd2FzIHRoZSBtZXNzYWdlIGFib3V0LCBhbmQgd2h5IHdhcyBpdCBzbyBtZW1vcmFibGU\/IiwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiQW5zd2VyIGV2ZXJ5IHBhcnQgb2YgdGhlIHF1ZXN0aW9uICh3aGF0IGhhcHBlbmVkIFx1MjAxMyBob3cgaXQgdW5mb2xkZWQgXHUyMDEzIHRoZSBvdXRjb21lIC8gd2h5IGl0IGlzIG1lbW9yYWJsZSkuIiwiVXNlIHBhc3QgdGVuc2VzIGFuZCB0ZWxsIGl0IGluIG9yZGVyOiBUaGlzIGhhcHBlbmVkXHUyMDI2IFx1MjE5MiBUaGVuXHUyMDI2IFx1MjE5MiBJbiB0aGUgZW5kXHUyMDI2IiwiRmluaXNoIHdpdGggYSBmZWVsaW5nIG9yIGEgbGVzc29uIGxlYXJuZWQuIiwiQW5zd2VyIHRoZSB0aHJlZSBwYXJ0czogd2hvIHNlbnQgaXQsIHdoYXQgdGhlIG1lc3NhZ2Ugc2FpZCwgYW5kIHdoeSBpdCB3YXMgc28gbWVtb3JhYmxlLiBUaGUgc2FtcGxlcyBkZXNjcmliZSBhIHVuaXZlcnNpdHkgYWNjZXB0YW5jZSBlbWFpbCBvcGVuZWQgbmVydm91c2x5IGF0IHRoZSBkaW5uZXIgdGFibGUgYW5kIHRoZSBmYW1pbHkgY2VsZWJyYXRpb24gdGhhdCBmb2xsb3dlZC4gUGljayBvbmUgcmVhbCBtZXNzYWdlIGFuZCBhZGQgYSB2aXZpZCBkZXRhaWwsIHdoZXJlIHlvdSB3ZXJlIGFuZCBob3cgeW91ciBoYW5kcyBzaG9vay4iXSwicGhyYXNlcyI6WyJUaGlzIGhhcHBlbmVkIGFib3V0IHR3byB5ZWFycyBhZ29cdTIwMjYiLCJBdCBmaXJzdFx1MjAyNiwgYnV0IHRoZW5cdTIwMjYiLCJXaGF0IG1hZGUgaXQgdW5mb3JnZXR0YWJsZSB3YXNcdTIwMjYiLCJMb29raW5nIGJhY2ssIFx1MjAyNiJdfSwiczYiOiJJIHdhbnQgdG8gdGFsayBhYm91dCB0aGUgZW1haWwgdGhhdCBjaGFuZ2VkIG15IGxpZmUsIG15IHVuaXZlcnNpdHkgYWNjZXB0YW5jZSBsZXR0ZXIuIEl0IGNhbWUgYWJvdXQgZml2ZSB5ZWFycyBhZ28sIHdoZW4gSSB3YXMgZWlnaHRlZW4uIEkgaGFkIGFwcGxpZWQgdG8gbXkgZHJlYW0gdW5pdmVyc2l0eSwgYnV0IHRoZSBwcm9ncmFtIHdhcyB2ZXJ5IGhhcmQgdG8gZ2V0IGludG8sIHNvIEkgd2FzIG5vdCBzdXJlIGF0IGFsbC4gRXZlcnkgZGF5IEkgY2hlY2tlZCBteSBlbWFpbCwgYWdhaW4gYW5kIGFnYWluLiBPbmUgZXZlbmluZywgSSB3YXMgZWF0aW5nIGRpbm5lciB3aXRoIG15IGZhbWlseSwgYW5kIG15IHBob25lIG1hZGUgYSBzb3VuZC4gSSBzYXcgdGhlIG5hbWUgb2YgdGhlIHVuaXZlcnNpdHksIGFuZCBteSBoZWFydCBzdGFydGVkIGJlYXRpbmcgZmFzdC4gTXkgaGFuZHMgd2VyZSBzaGFraW5nLCBhbmQgSSB3YXMgYWxtb3N0IGFmcmFpZCB0byBvcGVuIGl0LiBJIGdhdmUgdGhlIHBob25lIHRvIG15IG1vbSBhbmQgc2FpZCwgJ1lvdSByZWFkIGl0LCBJIGNhbm5vdCEnIFNoZSBvcGVuZWQgaXQsIGFuZCB0aGVuIHNoZSBzdGFydGVkIHRvIHNtaWxlLCBhbmQgdGhlbiBzaGUgYWxtb3N0IGNyaWVkLiBUaGUgZmlyc3Qgd29yZCB3YXMgJ0NvbmdyYXR1bGF0aW9ucycuIEkgZ290IGluISBFdmVyeWJvZHkgYXQgdGhlIHRhYmxlIHN0YXJ0ZWQgc2hvdXRpbmcgYW5kIGh1Z2dpbmcgbWUuIFdoeSB3YXMgaXQgc28gbWVtb3JhYmxlPyBCZWNhdXNlIEkgd29ya2VkIHNvIGhhcmQgZm9yIHR3byB5ZWFycyBmb3IgdGhpcyBvbmUgZW1haWwsIGFuZCBpbiBvbmUgc2Vjb25kLCBhbGwgdGhhdCB3b3JrIGJlY2FtZSBhICd5ZXMnLiBJdCB3YXMgbm90IGp1c3QgYW4gZW1haWwsIGl0IHdhcyBhIGRvb3Igb3BlbmluZyB0byBteSBmdXR1cmUuIEkgc3RpbGwga2VlcCBpdCBpbiBhIHNwZWNpYWwgZm9sZGVyLCBhbmQgc29tZXRpbWVzIEkgcmVhZCBpdCBhZ2FpbiB0byBmZWVsIHByb3VkLiIsInM5IjoiVGhlIG1vc3QgbWVtb3JhYmxlIG1lc3NhZ2UgSSBoYXZlIGV2ZXIgcmVjZWl2ZWQgd2FzIGEgc2luZ2xlIGVtYWlsOiBteSB1bml2ZXJzaXR5IGFjY2VwdGFuY2UgbGV0dGVyLCBhbmQgSSBjYW4gc3RpbGwgcmVwbGF5IHRoZSBtb21lbnQgaXQgYXJyaXZlZC4gSSB3YXMgZWlnaHRlZW4sIGFuZCBJIGhhZCBhcHBsaWVkIHRvIGEgcHJvZ3JhbSB0aGF0IHdhcyBub3RvcmlvdXNseSBjb21wZXRpdGl2ZSwgc28gZm9yIHdlZWtzIEkgaGFkIGJlZW4gcmVmcmVzaGluZyBteSBpbmJveCBvYnNlc3NpdmVseSwgYnJhY2luZyBteXNlbGYgZm9yIGEgcG9saXRlIHJlamVjdGlvbi4gVGhlIGVtYWlsIGNhbWUgb24gYW4gb3JkaW5hcnkgVHVlc2RheSBldmVuaW5nIHdoaWxlIG15IHdob2xlIGZhbWlseSB3YXMgc2l0dGluZyBhcm91bmQgdGhlIGRpbm5lciB0YWJsZS4gTXkgcGhvbmUgYnV6emVkLCBJIGdsYW5jZWQgZG93biwgYW5kIHRoZXJlIGl0IHdhcywgdGhlIHVuaXZlcnNpdHkncyBuYW1lIGluIHRoZSBzZW5kZXIgbGluZS4gTXkgaGVhcnQgbHVyY2hlZCBhbmQgbXkgaGFuZHMgYWN0dWFsbHkgc3RhcnRlZCB0cmVtYmxpbmc7IEkgd2FzIHNvIGNvbnZpbmNlZCBpdCB3b3VsZCBiZSBiYWQgbmV3cyB0aGF0IEkgY291bGQgbm90IGJyaW5nIG15c2VsZiB0byBvcGVuIGl0LiBJbiB0aGUgZW5kIEkgc2hvdmVkIHRoZSBwaG9uZSBhY3Jvc3MgdGhlIHRhYmxlIGF0IG15IG1vdGhlciBhbmQgYmx1cnRlZCwgJ1lvdSByZWFkIGl0LCBJIGNhbid0LicgSSB3YXRjaGVkIGhlciBmYWNlIGluc3RlYWQgb2YgdGhlIHNjcmVlbiwgYW5kIEkga25ldyB0aGUgYW5zd2VyIHRoZSBzZWNvbmQgaGVyIGV5ZXMgc29mdGVuZWQgYW5kIHNoZSBwcmVzc2VkIGEgaGFuZCB0byBoZXIgbW91dGguIFRoZSBmaXJzdCB3b3JkIHdhcyAnQ29uZ3JhdHVsYXRpb25zLicgVGhlIHRhYmxlIGVydXB0ZWQsIG15IGxpdHRsZSBicm90aGVyIHdhcyBjaGVlcmluZywgbXkgZmF0aGVyIHdhcyBvbiBoaXMgZmVldCwgYW5kIG15IG1vdGhlciB3YXMgaGFsZi1sYXVnaGluZywgaGFsZi1jcnlpbmcgYXMgc2hlIGh1Z2dlZCBtZS4gV2hhdCBtYWtlcyBpdCB1bmZvcmdldHRhYmxlIGlzIG5vdCByZWFsbHkgdGhlIGVtYWlsIGl0c2VsZiBidXQgZXZlcnl0aGluZyBiZWhpbmQgaXQ6IHR3byB5ZWFycyBvZiBsYXRlIG5pZ2h0cywgc2VsZi1kb3VidCBhbmQgcmVsZW50bGVzcyBlZmZvcnQsIGFsbCBvZiBpdCBhbnN3ZXJlZCBieSB0aGF0IG9uZSB3b3JkLiBJdCB3YXMgdGhlIG1vbWVudCBhbiBhYnN0cmFjdCBkcmVhbSB0dXJuZWQgaW50byBhIGNvbmNyZXRlIGZ1dHVyZSwgYSBkb29yIHN3aW5naW5nIG9wZW4uIEkgaGF2ZSBrZXB0IHRoYXQgZW1haWwgaW4gYSBzcGVjaWFsIGZvbGRlciBldmVyIHNpbmNlLCBhbmQgZXZlcnkgc28gb2Z0ZW4sIHdoZW4gSSBuZWVkIGEgbGlmdCwgSSBvcGVuIGl0IGFuZCByZW1lbWJlciBleGFjdGx5IGhvdyBpdCBmZWx0IHRvIHJlYWQgJ3llcy4nIn0seyJrIjoidDMiLCJudW0iOjMsInR5cGVFbiI6IkRlc2NyaWJpbmcgYSBTY2VuZSIsInByZXAiOjMwLCJyZWMiOjYwLCJwcm9tcHQiOiJEZXNjcmliZSBzb21lIHRoaW5ncyB0aGF0IGFyZSBoYXBwZW5pbmcgaW4gdGhlIHBpY3R1cmUgYmVsb3cgYXMgd2VsbCBhcyB5b3UgY2FuLiBUaGUgcGVyc29uIHdpdGggd2hvbSB5b3UgYXJlIHNwZWFraW5nIGNhbm5vdCBzZWUgdGhlIHBpY3R1cmUuIiwiaW1nIjoic2NlbmUiLCJ0aXBzIjp7ImJ1bGxldHMiOlsiRmlyc3Qgc2VudGVuY2U6IGdpdmUgdGhlIG92ZXJ2aWV3ICh3aGVyZSBpdCBpcywgd2hhdCB0aGUgYXRtb3NwaGVyZSBpcyBsaWtlKS4iLCJEZXNjcmliZSA0XHUyMDEzNiBkZXRhaWxzIGJ5IGxvY2F0aW9uOiBpbiB0aGUgZm9yZWdyb3VuZCAvIG9uIHRoZSBsZWZ0IC8gYXQgdGhlIGJhY2tcdTIwMjY7IHVzZSB0aGUgcHJlc2VudCBjb250aW51b3VzLiIsIlRoZSBsaXN0ZW5lciBDQU5OT1Qgc2VlIHRoZSBwaWN0dXJlIFx1MjAxNCBiZSBzcGVjaWZpYzsgd2hlbiB1bnN1cmUsIHVzZSBzZWVtcyAvIGFwcGVhcnMgLyBsb29rcyBsaWtlLiIsIkEgY2hhb3RpYyBvZmZpY2UgYnJlYWsgcm9vbSBhcm91bmQgNyBvJ2Nsb2NrICh0aGUgcmVkIHdhbGwgY2xvY2spLiBHbyBpbiBvcmRlcjogdGhlIHdoaXRlYm9hcmQgd2l0aCBhIGhhbmR3cml0dGVuIGxpc3QgYW5kIHRoZSBibHVlIHdhdGVyIGNvb2xlciB3aGVyZSBhbiBvbGRlciBtYW4gaW4gZ3JlZW4gaXMgZmlsbGluZyBhIGN1cCAtPiB0aGUgb3BlbiBmcmlkZ2Ugd2l0aCBzb21lb25lIHJ1bW1hZ2luZyBpbnNpZGUgYW5kIHRoZSBtaWNyb3dhdmUgd2hlcmUgYSBncmV5LWhhaXJlZCB3b21hbiByZWFjaGVzIHVwIGZvciBhIHBpZSAtPiB0aGUgbWFuIGluIGdyZWVuIHdob3NlIGZpenp5IGRyaW5rIGlzIHNwcmF5aW5nIGV2ZXJ5d2hlcmUgLT4gdGhlIGNlbnRyYWwgdGFibGUgd2l0aCBhIHJlZC1oYWlyZWQgd29tYW4gb24gYSBsYXB0b3AsIGEgbWFuIGluIHBpbmsgZWF0aW5nLCBhIGJsb25kZSB3b21hbiBpbiBhIHN1aXQgbGVhbmluZyBhY3Jvc3Mgd2l0aCBoZXIgcmVkIGhlZWxzIGtpY2tlZCBvZmYsIGFuZCBhIG1hbiBpbiBibHVlIHJ1c2hpbmcgcGFzdCAtPiB0aGUgd29tYW4gaW4gb3JhbmdlIGF0IHRoZSBmb29zYmFsbCB0YWJsZSAtPiBhbmQsIGZ1bm5pZXN0IG9mIGFsbCwgYSBwZXJzb24gZmxvcHBlZCBiYWNrIGFzbGVlcCBvbiB0aGUgZ3JlZW4gY291Y2ggd2VhcmluZyBhIHBhcnR5IGhhdC4iXSwicGhyYXNlcyI6WyJJbiB0aGUgZm9yZWdyb3VuZCwgXHUyMDI2IiwiT24gdGhlIHJpZ2h0LWhhbmQgc2lkZSwgXHUyMDI2IiwiSXQgbG9va3MgbGlrZVx1MjAyNiIsIlRoZSB3aG9sZSBwbGFjZSBmZWVsc1x1MjAyNiJdfSwiczYiOiJUaGlzIHBpY3R1cmUgc2hvd3MgYSB2ZXJ5IGJ1c3kgb2ZmaWNlIGJyZWFrIHJvb20sIGFuZCBpdCBsb29rcyBsaWtlIG9yZ2FuaXNlZCBjaGFvcyEgT24gdGhlIHRvcC1sZWZ0IHdhbGwgdGhlcmUgaXMgYSByb3VuZCByZWQgY2xvY2sgc2hvd2luZyBhYm91dCBzZXZlbiBvJ2Nsb2NrLiBOZWFyIGl0LCB0aGVyZSBpcyBhIHdoaXRlYm9hcmQgd2l0aCBhIGhhbmR3cml0dGVuIGxpc3Qgb24gaXQuIE9uIHRoZSBsZWZ0LCBhbiBvbGRlciBtYW4gaW4gYSBncmVlbiBzaGlydCBpcyBiZW5kaW5nIGRvd24gdG8gZmlsbCBhIGN1cCBhdCB0aGUgYmx1ZSB3YXRlciBjb29sZXIsIGFuZCBvdGhlciBwZW9wbGUgYXJlIHN0YW5kaW5nIGFuZCB0YWxraW5nLiBJbiB0aGUgbWlkZGxlLWJhY2ssIHNvbWVvbmUgaXMgbG9va2luZyBpbnNpZGUgYW4gb3BlbiBmcmlkZ2UsIGFuZCBuZXh0IHRvIGl0IGEgd29tYW4gd2l0aCBncmV5IGhhaXIgaXMgcmVhY2hpbmcgdXAgdG8gYSBtaWNyb3dhdmUgdGhhdCBoYXMgYSBwaWUgaW5zaWRlLiBPbmUgbWFuIGluIGEgZ3JlZW4gc2hpcnQgaXMgaG9sZGluZyBhIGRyaW5rLCBhbmQgaXQgaXMgc3ByYXlpbmcgZXZlcnl3aGVyZSwgbGlrZSBhbiBhY2NpZGVudCEgSW4gdGhlIGZyb250LCB0aGVyZSBpcyBhIGxvbmcgdGFibGUuIEEgd29tYW4gd2l0aCByZWQgaGFpciBhbmQgZ2xhc3NlcyBpcyB3b3JraW5nIG9uIGEgbGFwdG9wLCBhIG1hbiBpbiBhIHBpbmsgc2hpcnQgaXMgc2l0dGluZyBhbmQgZWF0aW5nLCBhbmQgYSBibG9uZGUgd29tYW4gaW4gYSBibGFjayBzdWl0IGlzIGxlYW5pbmcgYWNyb3NzIHRoZSB0YWJsZSwgc2hlIGV2ZW4gdG9vayBvZmYgaGVyIHJlZCBoaWdoLWhlZWwgc2hvZXMhIEEgbWFuIGluIGEgYmx1ZSBzaGlydCBpcyBydXNoaW5nIHBhc3QgdmVyeSBmYXN0LiBPbiB0aGUgcmlnaHQsIGEgd29tYW4gaW4gb3JhbmdlIGlzIHBsYXlpbmcgYSBmb29zYmFsbCB0YWJsZSBnYW1lLiBBbmQgdGhlIGZ1bm5pZXN0IHRoaW5nLCBvbmUgcGVyc29uIGlzIGx5aW5nIG9uIHRoZSBncmVlbiBzb2ZhLCBzbGVlcGluZywgd2l0aCBhIHBhcnR5IGhhdCBvbiBoaXMgZmFjZSEiLCJzOSI6IlRoaXMgaXMgYSBnbG9yaW91c2x5IGNoYW90aWMgb2ZmaWNlIGJyZWFrIHJvb20sIHRoZSBraW5kIG9mIHNjZW5lIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgaGFwcGVuaW5nIGF0IG9uY2UuIFVwIG9uIHRoZSBiYWNrIHdhbGwgYSByb3VuZCwgcmVkLWZyYW1lZCBjbG9jayByZWFkcyBhYm91dCBzZXZlbiwgYW5kIGJlc2lkZSBpdCBoYW5ncyBhIHdoaXRlYm9hcmQgY292ZXJlZCBpbiBhIGhhbmR3cml0dGVuIHRvLWRvIGxpc3QsIHNvIEkgd291bGQgZ3Vlc3MgaXQgaXMgZWl0aGVyIHZlcnkgZWFybHkgb3IgdGhlIGVuZCBvZiBhIGxvbmcgZGF5LiBPbiB0aGUgbGVmdCwgYW4gb2xkZXIgZ2VudGxlbWFuIGluIGEgZ3JlZW4gc2hpcnQgc3Rvb3BzIHRvIGZpbGwgYSBjdXAgYXQgdGhlIGJsdWUgd2F0ZXIgY29vbGVyIHdoaWxlIGEgY2x1c3RlciBvZiBjb2xsZWFndWVzIHN0YW5kIGFyb3VuZCBjaGF0dGluZy4gVG93YXJkcyB0aGUgY2VudHJlLWJhY2ssIHNvbWVvbmUgaXMgYnVyaWVkIGhlYWQtZmlyc3QgaW4gYW4gb3BlbiByZWZyaWdlcmF0b3IsIGh1bnRpbmcgZm9yIHNvbWV0aGluZywgYW5kIHJpZ2h0IG5leHQgdG8gdGhlbSBhIGdyZXktaGFpcmVkIHdvbWFuIHN0cmV0Y2hlcyB1cCB0byBhIG1pY3Jvd2F2ZSB0aGF0IGhhcyBhIGdvbGRlbiBwaWUgZ2xvd2luZyBpbnNpZGUuIFRoZW4gY29tZXMgbXkgZmF2b3VyaXRlIGJpdCBvZiBzbGFwc3RpY2s6IGEgbWFuIGluIGEgZ3JlZW4gc3dlYXRlciBpcyBob2xkaW5nIGEgZml6enkgZHJpbmsgdGhhdCBoYXMgY2xlYXJseSBqdXN0IGV4cGxvZGVkLCBzcHJheWluZyBldmVyeXdoZXJlLiBUaGUgbG9uZyB0YWJsZSBpbiB0aGUgZm9yZWdyb3VuZCBpcyBpdHMgb3duIGxpdHRsZSBjaXJjdXMsIGEgcmVkLWhhaXJlZCB3b21hbiBpbiBnbGFzc2VzIHRhcHMgYXdheSBhdCBhIGxhcHRvcCwgYSBtYW4gaW4gYSBwaW5rIHNoaXJ0IGlzIHR1Y2tpbmcgaW50byBhIHBsYXRlIG9mIGZvb2QsIGFuZCBhIGJsb25kZSB3b21hbiBpbiBhIHNtYXJ0IGJsYWNrIHN1aXQgbGVhbnMgcmlnaHQgYWNyb3NzIHRoZSB0YWJsZSwgaGF2aW5nIGtpY2tlZCBvZmYgaGVyIHJlZCBoaWdoIGhlZWxzLCB3aGljaCBsaWUgYWJhbmRvbmVkIG9uIHRoZSBmbG9vci4gQSBtYW4gaW4gYSBsaWdodC1ibHVlIHNoaXJ0IGRhc2hlcyBwYXN0IG1pZC1zdHJpZGUsIGxhdGUgZm9yIHNvbWV0aGluZy4gT3ZlciBvbiB0aGUgcmlnaHQsIGEgd29tYW4gaW4gb3JhbmdlIGlzIGJlbnQgb3ZlciBhIGNvbG91cmZ1bCBmb29zYmFsbCB0YWJsZSwgbWlkLWdhbWUuIEFuZCB0aGUgY3Jvd25pbmcgdG91Y2gsIGZyb250IGFuZCBjZW50cmUsIGlzIGEgcGVyc29uIHNwcmF3bGVkIGZsYXQgb24gdGhlaXIgYmFjayBvbiBhIGdyZWVuIGNvdWNoLCBmYXN0IGFzbGVlcCB3aXRoIGEgcGFydHkgaGF0IHRpcHBlZCBvdmVyIHRoZWlyIGZhY2UuIEl0IGlzIHB1cmUsIGNoZWVyZnVsIHBhbmRlbW9uaXVtLiJ9LHsiayI6InQ0IiwibnVtIjo0LCJ0eXBlRW4iOiJNYWtpbmcgUHJlZGljdGlvbnMiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiSW4gdGhpcyBwaWN0dXJlLCB3aGF0IGRvIHlvdSB0aGluayB3aWxsIG1vc3QgcHJvYmFibHkgaGFwcGVuIG5leHQ\/IiwiaW1nIjoic2NlbmUiLCJ0aXBzIjp7ImJ1bGxldHMiOlsiRWFjaCBwcmVkaWN0aW9uID0gd2lsbCAvIGJlIGdvaW5nIHRvIC8gd2lsbCBwcm9iYWJseSArIGEgUkVBU09OIGJhc2VkIG9uIGEgZGV0YWlsIGluIHRoZSBwaWN0dXJlLiIsIk1ha2UgM1x1MjAxMzQgcHJlZGljdGlvbnMgYWJvdXQgZGlmZmVyZW50IHBlb3BsZSBcdTIwMTQgZG9uJ3Qgc3RvcCBhdCBvbmUgaWRlYS4iLCJGaW5pc2ggd2l0aCBvbmUgb3ZlcmFsbCBwcmVkaWN0aW9uIGZvciB0aGUgd2hvbGUgc2NlbmUuIiwiU2FtZSBicmVhayByb29tIGFzIFRhc2sgMyAtIG5vdyBwcmVkaWN0OiB0aGUgZXhwbG9kaW5nIGRyaW5rIHdpbGwgc29hayB0aGUgcGFwZXJzIGFuZCBzb21lb25lIHdpbGwgZ3JhYiBwYXBlciB0b3dlbHMgdG8gbW9wIHVwOyB0aGUgZ3JleS1oYWlyZWQgd29tYW4gd2lsbCBwdWxsIGhlciBob3QgcGllIG91dCBvZiB0aGUgbWljcm93YXZlOyB0aGUgcGVyc29uIGF0IHRoZSBmcmlkZ2Ugd2lsbCBmaW5hbGx5IGZpbmQgdGhlaXIgbHVuY2g7IHRoZSBibG9uZGUgd29tYW4gd2lsbCBncmFiIHRoZSBmb29kLCBzbGlwIGhlciByZWQgaGVlbHMgYmFjayBvbiwgYW5kIHJ1c2ggdG8gYSBtZWV0aW5nOyB0aGUgbWFuIGluIGJsdWUgd2lsbCBodXJyeSBvdXQgdGhlIGRvb3I7IHRoZSBmb29zYmFsbCBtYXRjaCB3aWxsIGZpbmlzaDsgYW5kIHRoZSBzbGVlcGVyIG9uIHRoZSBjb3VjaCB3aWxsIGJlIHdva2VuIHVwIGJ5IGFsbCB0aGUgbm9pc2UuIl0sInBocmFzZXMiOlsiXHUyMDI2aXMgYWJvdXQgdG9cdTIwMjYiLCJIZSdsbCBtb3N0IGxpa2VseVx1MjAyNiIsIkp1ZGdpbmcgYnlcdTIwMjYsIEkgZXhwZWN0XHUyMDI2IiwiV2l0aGluIG1pbnV0ZXMsIFx1MjAyNiJdfSwiczYiOiJJIHRoaW5rIGluIHRoZSBuZXh0IGZldyBtaW51dGVzIHRoaXMgYnJlYWsgcm9vbSB3aWxsIGJlY29tZSBldmVuIG1vcmUgY3JhenkgYmVmb3JlIGl0IGNhbG1zIGRvd24uIEZpcnN0LCB0aGF0IGRyaW5rIHRoYXQgaXMgc3ByYXlpbmcgZXZlcnl3aGVyZSB3aWxsIG1ha2UgYSBiaWcgbWVzcyBvbiB0aGUgdGFibGUgYW5kIHRoZSBmbG9vciwgc28gc29tZW9uZSB3aWxsIHJ1biB0byBnZXQgcGFwZXIgdG93ZWxzIGFuZCBzdGFydCBjbGVhbmluZyBxdWlja2x5LiBUaGUgd29tYW4gd2l0aCBncmV5IGhhaXIgd2lsbCBvcGVuIHRoZSBtaWNyb3dhdmUgYW5kIHRha2Ugb3V0IGhlciBob3QgcGllLCBtYXliZSBzaGUgd2lsbCBidXJuIGhlciBmaW5nZXJzIGEgbGl0dGxlIGJlY2F1c2UgaXQgaXMgc28gaG90ISBUaGUgcGVyc29uIGxvb2tpbmcgaW4gdGhlIGZyaWRnZSB3aWxsIGZpbmFsbHkgZmluZCB0aGVpciBmb29kIGFuZCBjbG9zZSB0aGUgZG9vci4gSSB0aGluayB0aGUgYmxvbmRlIHdvbWFuIGluIHRoZSBzdWl0IGlzIGluIGEgaHVycnksIHNvIHNoZSB3aWxsIGdyYWIgc29tZXRoaW5nIHRvIGVhdCwgcHV0IGhlciByZWQgc2hvZXMgYmFjayBvbiwgYW5kIHJ1biB0byBhIG1lZXRpbmcuIFRoZSBtYW4gaW4gdGhlIGJsdWUgc2hpcnQgaXMgYWxyZWFkeSBydW5uaW5nLCBzbyBoZSB3aWxsIGdvIG91dCB0aGUgZG9vciB2ZXJ5IGZhc3QuIFRoZSBwZW9wbGUgcGxheWluZyB0aGUgZm9vc2JhbGwgZ2FtZSB3aWxsIGZpbmlzaCB0aGVpciBtYXRjaCwgYW5kIG9uZSBvZiB0aGVtIHdpbGwgd2luIGFuZCBiZSBoYXBweS4gQW5kIHRoZSBwb29yIHBlcnNvbiBzbGVlcGluZyBvbiB0aGUgc29mYT8gV2l0aCBhbGwgdGhpcyBub2lzZSBhbmQgbWVzcywgSSBhbSBzdXJlIHNvbWVvbmUgd2lsbCB3YWtlIGhpbSB1cCBzb29uLCBtYXliZSBmb3IgdGhlIG1lZXRpbmcuIEluIHRoZSBlbmQsIGV2ZXJ5Ym9keSB3aWxsIGdvIGJhY2sgdG8gd29yaywgYW5kIHRoZSBicmVhayByb29tIHdpbGwgYmUgcXVpZXQgYW5kIGVtcHR5IGFnYWluLiIsInM5IjoiR2l2ZSB0aGlzIGJyZWFrIHJvb20gYW5vdGhlciBmZXcgbWludXRlcyBhbmQgdGhlIGNoYW9zIHdpbGwgcGVhayBiZWZvcmUgaXQgZmluYWxseSBzZXR0bGVzLiBUaGUgbW9zdCB1cmdlbnQgdGhpbmcgaXMgdGhhdCBleHBsb2RpbmcgZml6enkgZHJpbms6IGl0IGlzIGdvaW5nIHRvIHNvYWsgdGhlIHBhcGVycyBhbmQgc3BsYXR0ZXIgdGhlIGZsb29yLCBzbyBJIGZ1bGx5IGV4cGVjdCB0aGUgbWFuIGhvbGRpbmcgaXQgdG8geWVscCwgYW5kIHNvbWVvbmUgbmVhcmJ5IHRvIGRhc2ggZm9yIGEgcm9sbCBvZiBwYXBlciB0b3dlbHMgYW5kIHN0YXJ0IG1vcHBpbmcgdXAgdGhlIHN0aWNreSBtZXNzLiBUaGUgZ3JleS1oYWlyZWQgd29tYW4gYXQgdGhlIG1pY3Jvd2F2ZSB3aWxsIHB1bGwgb3V0IGhlciBwaWUgdGhlIGluc3RhbnQgaXQgcGluZ3MsIHByb2JhYmx5IGp1Z2dsaW5nIGl0IGJlY2F1c2UgaXQgaXMgdG9vIGhvdCB0byBob2xkLCB3aGlsZSB0aGUgY29sbGVhZ3VlIHJ1bW1hZ2luZyBpbiB0aGUgZnJpZGdlIHdpbGwgYXQgbGFzdCBzdXJmYWNlIHRyaXVtcGhhbnRseSB3aXRoIHRoZWlyIGx1bmNoIGFuZCBsZXQgdGhlIGRvb3Igc3dpbmcgc2h1dC4gVGhlIGJsb25kZSB3b21hbiBpbiB0aGUgc3VpdCBpcyBjbGVhcmx5IHRoZSBvbmUgaW4gYSBydXNoLCBzbyBteSBiZXQgaXMgc2hlIHdpbGwgc25hdGNoIHRoZSBmb29kIG9mZiB0aGF0IHBsYXRlLCBzbGlkZSBoZXIgcmVkIGhlZWxzIGJhY2sgb24sIGFuZCBzdHJpZGUgb2ZmIHRvIHdoYXRldmVyIG1lZXRpbmcgc2hlIGlzIGxhdGUgZm9yLCBqdXN0IGFzIHRoZSBtYW4gaW4gdGhlIGJsdWUgc2hpcnQgaXMgYWxyZWFkeSBib2x0aW5nIGZvciB0aGUgZG9vci4gVGhlIGZvb3NiYWxsIG1hdGNoIG9uIHRoZSByaWdodCB3aWxsIHBsYXkgb3V0IHRvIGl0cyBub2lzeSBjb25jbHVzaW9uLCB3aXRoIHBsZW50eSBvZiBjaGVlcmluZyB3aGVuIHNvbWVvbmUgc2NvcmVzIHRoZSB3aW5uaW5nIGdvYWwuIEFuZCB0aGUgc2xlZXBlciBvbiB0aGUgY291Y2gsIGJsZXNzIGhpbSwgZG9lcyBub3Qgc3RhbmQgYSBjaGFuY2U6IGJldHdlZW4gdGhlIHNwcmF5aW5nIGRyaW5rLCB0aGUgc2hvdXRpbmcgYW5kIHRoZSBnZW5lcmFsIGNvbW1vdGlvbiwgc29tZW9uZSBpcyBib3VuZCB0byBzaGFrZSBoaW0gYXdha2UsIHF1aXRlIHBvc3NpYmx5IHRvIGRyYWcgaGltIGludG8gdGhhdCBzYW1lIG1lZXRpbmcsIHBhcnR5IGhhdCBhbmQgYWxsLiBab29tIG91dCwgYW5kIHRoZSBsaWtlbGllc3QgZW5kaW5nIGlzIHRoZSBmYW1pbGlhciBvbmU6IHRoZSBkcmluayBnZXRzIHdpcGVkIHVwLCB0aGUgZm9vZCBnZXRzIGVhdGVuLCBhbmQgb25lIGJ5IG9uZSBldmVyeW9uZSBkcmlmdHMgYmFjayB0byB0aGVpciBkZXNrcywgbGVhdmluZyB0aGUgYnJlYWsgcm9vbSBxdWlldCwgY2x1dHRlcmVkIGFuZCBlbXB0eSB1bnRpbCB0aGUgbmV4dCBydXNoLiJ9LHsiayI6InQ1IiwibnVtIjo1LCJ0eXBlRW4iOiJDb21wYXJpbmcgYW5kIFBlcnN1YWRpbmciLCJwaGFzZWQiOnRydWUsImNob29zZSI6eyJwcmVwIjo2MCwic2l0dWF0aW9uIjoiWW91IGFuZCBhIGZyaWVuZCBhcmUgdGFraW5nIGEgd2Vla2VuZCB0cmlwIHRvIGEgcG9wdWxhciBiZWFjaCB0b3duIDEwMCBraWxvbWV0cmVzIGF3YXksIGFuZCB5b3UgbmVlZCB0byBkZWNpZGUgd2hhdCB0eXBlIG9mIHRyYW5zcG9ydGF0aW9uIHRvIHVzZS4gWW91IGZvdW5kIHR3byBzdWl0YWJsZSBvcHRpb25zLiBVc2luZyB0aGUgcGljdHVyZXMgYW5kIGluZm9ybWF0aW9uIGJlbG93LCBjaG9vc2UgdGhlIG9wdGlvbiB0aGF0IHlvdSBwcmVmZXIuIEluIHRoZSBuZXh0IHNlY3Rpb24sIHlvdSB3aWxsIG5lZWQgdG8gcGVyc3VhZGUgeW91ciBmcmllbmQgdGhhdCB5b3VyIGNob2ljZSBpcyB0aGUgYmV0dGVyIGNob2ljZS4iLCJub3RlIjoiSWYgeW91IGRvIG5vdCBjaG9vc2UgYW4gb3B0aW9uLCB0aGUgY29tcHV0ZXIgd2lsbCBjaG9vc2Ugb25lIGZvciB5b3UuIFlvdSBkbyBub3QgbmVlZCB0byBzcGVhayBmb3IgdGhpcyBwYXJ0LiIsIm9wdGlvbnMiOlt7InRpdGxlIjoiU3BlZWQgVHJhaW4iLCJpbWciOiJvcHRBIiwiYnVsbGV0cyI6WyJyb3VuZCB0cmlwIHRpY2tldDogJDcwIiwiMS1ob3VyIHRyaXAgZWFjaCB3YXkiLCJzbmFja3MgYW5kIGRyaW5rcyBhdmFpbGFibGUgZm9yIHB1cmNoYXNlIiwid2FzaHJvb20sIFdpLUZpLCBhbmQgYWlyIGNvbmRpdGlvbmluZyBvbiBib2FyZCJdfSx7InRpdGxlIjoiRmFzdCBCdXMiLCJpbWciOiJvcHRCIiwiYnVsbGV0cyI6WyJyb3VuZCB0cmlwIHRpY2tldDogJDQwIiwiMi1ob3VyIHRyaXAgZWFjaCB3YXkiLCJtYWtlcyBhIHN0b3AgZm9yIHNuYWNrcyBhbmQgZHJpbmtzIiwid2FzaHJvb20gYW5kIGFpciBjb25kaXRpb25pbmcgb24gYm9hcmQiXX1dfSwic3BlYWsiOnsicHJlcCI6NjAsInJlYyI6NjAsInByb21wdCI6IllvdXIgZnJpZW5kIGlzIHN1Z2dlc3RpbmcgYW5vdGhlciB0eXBlIG9mIHRyYW5zcG9ydGF0aW9uLiBQZXJzdWFkZSB5b3VyIGZyaWVuZCB0aGF0IHRoZSB0cmFuc3BvcnRhdGlvbiBvcHRpb24geW91IGNob3NlIGlzIG1vcmUgc3VpdGFibGUgYnkgY29tcGFyaW5nIHRoZSB0d28uIiwib3RoZXJMYWJlbCI6IllvdXIgRnJpZW5kJ3MgU3VnZ2VzdGlvbiIsIm90aGVyIjp7InRpdGxlIjoiUmV0cm8gUmVudGFsIENhciIsImltZyI6Im9wdE90aGVyIiwiYnVsbGV0cyI6WyIkMTAwIHBlciBkYXkgcGx1cyB0aGUgY29zdCBvZiBnYXMiLCIzLWhvdXIgdHJpcCBvbmUtd2F5Iiwibm8gcmFkaW8gb3IgYWlyIGNvbmRpdGlvbmluZyIsIm5lZWQgdG8gcGF5IGZvciBwYXJraW5nIl19fSwidGlwcyI6eyJidWxsZXRzIjpbIlN0cnVjdHVyZTogYWNrbm93bGVkZ2UgdGhlIG90aGVyIHBlcnNvbidzIGNob2ljZSBcdTIxOTIgZ2l2ZSAyXHUyMDEzMyBhZHZhbnRhZ2VzIG9mIHlvdXJzIChkaXJlY3QgY29tcGFyaXNvbikgXHUyMTkyIHdyYXAgdXAuIiwiQ29tcGFyZSB1c2luZyB0aGUgbnVtYmVycyBvbiB0aGUgY2FyZHM6IHByaWNlLCBkdXJhdGlvbiwgY2FwYWNpdHksIGV4cGVyaWVuY2UuIiwiWW91IGRvIE5PVCBuZWVkIHRvIHNwZWFrIGR1cmluZyB0aGUgY2hvb3Npbmcgc3RlcCBcdTIwMTQganVzdCBjbGljayBhbiBvcHRpb24uIiwiVGhlIHNhbXBsZXMgY2hvb3NlIHRoZSBTcGVlZCBUcmFpbiAoJDcwIHJvdW5kIHRyaXAsIDEgaG91ciBlYWNoIHdheSwgV2ktRmksIHdhc2hyb29tIGFuZCBhaXIgY29uZGl0aW9uaW5nKS4gSXQgaXMgYnkgZmFyIHRoZSBmYXN0ZXN0IGFuZCBtb3N0IGNvbWZvcnRhYmxlIHdheSB0byByZWFjaCB0aGUgYmVhY2ggdG93biwgYW5kIG9uY2UgeW91IGFkZCBwZXRyb2wgYW5kIHBhcmtpbmcgaXQgd29ya3Mgb3V0IGNoZWFwZXIgdGhhbiB5b3VyIGZyaWVuZCdzIFJldHJvIFJlbnRhbCBDYXIgKCQxMDAgYSBkYXkgcGx1cyBnYXMsIGEgMy1ob3VyIGRyaXZlIG9uZS13YXksIG5vIHJhZGlvIG9yIGFpciBjb25kaXRpb25pbmcsIGFuZCB5b3UgcGF5IGZvciBwYXJraW5nKS4gVGhlIEZhc3QgQnVzIGlzIHRoZSBidWRnZXQgb3B0aW9uIGF0ICQ0MCBidXQgdGFrZXMgMiBob3VycyBlYWNoIHdheS4gSWYgeW91IHByZWZlciB0aGUgYnVzLCBzdHJlc3MgdGhlIGxvdyBwcmljZS4iXSwicGhyYXNlcyI6WyJJIHNlZSB3aHkgeW91IGxpa2VcdTIwMjYsIGJ1dFx1MjAyNiIsIkNvbXBhcmVkIHRvXHUyMDI2LCB0aGlzIG9uZVx1MjAyNiIsIkl0J3MgYmV0dGVyIHZhbHVlOiBcdTIwMjYgdmVyc3VzIFx1MjAyNiIsIklmIHRoZSBnb2FsIGlzXHUyMDI2LCB0aGUgY2hvaWNlIGlzIGNsZWFyLiJdfSwiczYiOiJDb21lIG9uLCBJIGtub3cgdGhlIHJldHJvIGNhciBsb29rcyBjb29sIGZvciBhIGJlYWNoIHRyaXAsIGJ1dCBsZXQncyBiZSBob25lc3QgYW5kIGNvbXBhcmUgaXQgd2l0aCBteSBjaG9pY2UsIHRoZSBTcGVlZCBUcmFpbi4gRmlyc3QsIGxvb2sgYXQgdGhlIHRpbWUuIFRoZSByZW50YWwgY2FyIHRha2VzIHRocmVlIGhvdXJzIHRvIGRyaXZlIHRoZXJlLCBvbmUgd2F5ISBUaGF0IGlzIHNpeCBob3VycyBvZiBkcml2aW5nIGZvciBvbmUgd2Vla2VuZC4gVGhlIHRyYWluIHRha2VzIG9ubHkgb25lIGhvdXIgZWFjaCB3YXksIHNvIHdlIGdldCBzbyBtdWNoIG1vcmUgYmVhY2ggdGltZS4gU2Vjb25kLCB0aGUgcHJpY2UuIFRoZSBjYXIgaXMgb25lIGh1bmRyZWQgZG9sbGFycyBhIGRheSwgcGx1cyBnYXMsIHBsdXMgd2UgaGF2ZSB0byBwYXkgZm9yIHBhcmtpbmcuIFRoYXQgaXMgYSBsb3Qgb2YgbW9uZXkuIFRoZSB0cmFpbiBpcyBvbmx5IHNldmVudHkgZG9sbGFycyBmb3IgdGhlIHJvdW5kIHRyaXAsIGFuZCB0aGVyZSBpcyBubyBnYXMgYW5kIG5vIHBhcmtpbmcgdG8gd29ycnkgYWJvdXQuIFRoaXJkLCBjb21mb3J0LiBUaGUgcmV0cm8gY2FyIGhhcyBubyByYWRpbyBhbmQgbm8gYWlyIGNvbmRpdGlvbmluZywgc28gd2Ugd2lsbCBiZSBob3QgYW5kIGJvcmVkIG9uIGEgbG9uZywgc2xvdyBkcml2ZS4gVGhlIHRyYWluIGhhcyBhaXIgY29uZGl0aW9uaW5nLCBXaS1GaSwgYSB3YXNocm9vbSwgYW5kIHdlIGNhbiBidXkgc25hY2tzIGFuZCBqdXN0IHJlbGF4IGFuZCBsb29rIG91dCB0aGUgd2luZG93LiBUaGUgYnVzIGlzIGNoZWFwZXIsIHRoYXQgaXMgdHJ1ZSwgYnV0IGl0IHRha2VzIHR3byBob3VycyBlYWNoIHdheS4gVGhlIHRyYWluIGlzIGZhc3RlciBhbmQgbmljZXIuIFNvIHBsZWFzZSwgbGV0J3MgdGFrZSB0aGUgU3BlZWQgVHJhaW4sIHdlIHNhdmUgbW9uZXksIHdlIHNhdmUgdGltZSwgYW5kIHdlIGFycml2ZSBmcmVzaCBhbmQgcmVhZHkgZm9yIHRoZSBiZWFjaC4gRGVhbD8iLCJzOSI6IkkgZ2V0IGl0LCB0aGVyZSBpcyBzb21ldGhpbmcgY2hhcm1pbmcgYWJvdXQgcm9sbGluZyB1cCB0byB0aGUgYmVhY2ggaW4gYSByZXRybyBjYXIsIGJ1dCBsZXQncyBhY3R1YWxseSBwdXQgeW91ciBpZGVhIG5leHQgdG8gbWluZSwgdGhlIFNwZWVkIFRyYWluLCBhbmQgSSB0aGluayB0aGUgY2hvaWNlIG1ha2VzIGl0c2VsZi4gU3RhcnQgd2l0aCB0aW1lLCBiZWNhdXNlIHRoYXQgaXMgdGhlIGJpZyBvbmUuIFlvdXIgUmV0cm8gUmVudGFsIENhciBpcyBhIHRocmVlLWhvdXIgZHJpdmUgZWFjaCB3YXksIHNvIHdlIHdvdWxkIGJ1cm4gc2l4IGhvdXJzIG9mIGEgc2hvcnQgd2Vla2VuZCBqdXN0IGdldHRpbmcgdGhlcmUgYW5kIGJhY2suIFRoZSBTcGVlZCBUcmFpbiBjb3ZlcnMgdGhlIHNhbWUgdHJpcCBpbiBvbmUgaG91ciBlYWNoIHdheSwgdGhhdCBpcyBmb3VyIGV4dHJhIGhvdXJzIG9uIHRoZSBzYW5kIGluc3RlYWQgb2Ygc3R1Y2sgYmVoaW5kIHRoZSB3aGVlbC4gVGhlbiB0aGVyZSBpcyB0aGUgbW9uZXksIHdoaWNoIGlzIG5vdCBldmVuIGNsb3NlLiBUaGUgY2FyIGlzIGEgaHVuZHJlZCBkb2xsYXJzIGEgZGF5IHBsdXMgdGhlIGNvc3Qgb2YgcGV0cm9sLCBhbmQgdGhlbiB3ZSBzdGlsbCBoYXZlIHRvIHBheSBmb3IgcGFya2luZyBvbmNlIHdlIGFycml2ZS4gVGhlIHRyYWluIGlzIGEgZmxhdCBzZXZlbnR5IGRvbGxhcnMgZm9yIHRoZSByb3VuZCB0cmlwLCB3aXRoIG5vIGZ1ZWwgYW5kIG5vIHBhcmtpbmcgdG8gZnJldCBhYm91dCwgc28gaXQgaXMgZ2VudWluZWx5IGNoZWFwZXIgb25jZSB5b3UgYWRkIGV2ZXJ5dGhpbmcgdXAuIEFuZCBjb21mb3J0IHNlYWxzIGl0OiB5b3VyIHJlbnRhbCBoYXMgbm8gcmFkaW8gYW5kIG5vIGFpciBjb25kaXRpb25pbmcsIHdoaWNoIG1lYW5zIGEgbG9uZywgaG90LCBzaWxlbnQgc2xvZywgd2hlcmVhcyB0aGUgdHJhaW4gZ2l2ZXMgdXMgYWlyIGNvbmRpdGlvbmluZywgV2ktRmksIGEgd2FzaHJvb20gYW5kIHNuYWNrcyBmb3Igc2FsZSwgc28gd2UgY2FuIHN0cmV0Y2ggb3V0LCBtZXNzYWdlIGV2ZXJ5b25lIGFib3V0IG91ciBwbGFucywgYW5kIHdhdGNoIHRoZSBjb2FzdCByb2xsIGJ5LiBJIGRpZCBjb25zaWRlciB0aGUgRmFzdCBCdXMsIGl0IGlzIHRoZSBjaGVhcGVzdCBhdCBmb3J0eSBkb2xsYXJzLCBidXQgYXQgdHdvIGhvdXJzIGVhY2ggd2F5IGl0IGlzIHNsb3dlciB0aGFuIHRoZSB0cmFpbiBmb3Igbm90IHRoYXQgbXVjaCBsZXNzIG1vbmV5LiBTbyB0aGUgdHJhaW4gd2lucyBvbiBzcGVlZCwgb24gdG90YWwgY29zdCBhbmQgb24gY29tZm9ydCwgYW5kIHdlIHdvdWxkIGFycml2ZSByZWxheGVkIGluc3RlYWQgb2YgZnJhenpsZWQuIFNoYWxsIHdlIGJvb2sgdGhlIFNwZWVkIFRyYWluPyJ9LHsiayI6InQ2IiwibnVtIjo2LCJ0eXBlRW4iOiJEZWFsaW5nIHdpdGggYSBEaWZmaWN1bHQgU2l0dWF0aW9uIiwicHJlcCI6NjAsInJlYyI6NjAsInByb21wdCI6IkEgY28td29ya2VyIHdvdWxkIGxpa2UgdG8gdHJhZGUgc2hpZnRzIHdpdGggeW91IHNvIHRoYXQgc2hlIGNhbiBhdHRlbmQgYSBjb25jZXJ0LiBTaGUgaGFzIGJlZW4gd2FpdGluZyBmb3IgeWVhcnMgZm9yIHRoZSBvcHBvcnR1bml0eSB0byBzZWUgdGhpcyBjb25jZXJ0LiBJZiB5b3UgYWdyZWUgdG8gdHJhZGUgc2hpZnRzIHdpdGggeW91ciBjby13b3JrZXIsIHlvdSB3aWxsIG1pc3MgeW91ciBmcmllbmQncyBiaXJ0aGRheSBwYXJ0eS4iLCJjaG9vc2VPbmUiOlsiVGFsayB0byB5b3VyIGNvLXdvcmtlci4gRXhwbGFpbiB3aHkgeW91IGNhbm5vdCB0cmFkZSBzaGlmdHMgd2l0aCBoZXIuIiwiVGFsayB0byB5b3VyIGZyaWVuZC4gRXhwbGFpbiB3aHkgeW91IHdvbid0IGJlIGFibGUgdG8gYXR0ZW5kIGhlciBiaXJ0aGRheSBwYXJ0eS4iXSwiaW1nIjpudWxsLCJ0aXBzIjp7ImJ1bGxldHMiOlsiUGljayBPTkUgb3B0aW9uIChFSVRIRVIgb3IgT1IpIGltbWVkaWF0ZWx5IFx1MjAxNCBkb24ndCB3YXN0ZSB0aW1lIGRlY2lkaW5nLiIsIlN0cnVjdHVyZTogb3BlbiBwb2xpdGVseSBcdTIxOTIgZXhwbGFpbiB5b3VyIHJlYXNvbnMvZXZpZGVuY2UgXHUyMTkyIHByb3Bvc2UgYSBzb2x1dGlvbiBcdTIxOTIgc21vb3RoIHRoaW5ncyBvdmVyLiIsIlN0YXkgY2FsbSBhbmQgcmVzcGVjdGZ1bCBcdTIwMTQgaG93IHlvdSBoYW5kbGUgdGhlIHNpdHVhdGlvbiBpcyBwYXJ0IG9mIHdoYXQncyBiZWluZyByYXRlZCAoTGlzdGVuYWJpbGl0eSkuIiwiVGhlIHNhbXBsZXMgcGljayBvcHRpb24gMSAtIHRhbGsgdG8gdGhlIGNvLXdvcmtlciBhbmQgZ2VudGx5IGV4cGxhaW4gdGhhdCB5b3UgY2Fubm90IHRyYWRlIHNoaWZ0cy4gUmVhc29uaW5nOiB5b3UgYWxyZWFkeSBwcm9taXNlZCB5b3VyIGNsb3NlIGZyaWVuZCB5b3Ugd291bGQgYmUgYXQgaGVyIGJpcnRoZGF5IHBhcnR5IGFuZCBzaGUgaXMgY291bnRpbmcgb24geW91LCBhbmQgYSBwZXJzb25hbCBwcm9taXNlIG1hZGUgZmlyc3Qgc2hvdWxkIGJlIGtlcHQuIEJlIHdhcm0gYW5kIG9mZmVyIHJlYWwgaGVscCBpbnN0ZWFkOiB5b3Ugd2lsbCBhc2sgYXJvdW5kIHRoZSB0ZWFtIGZvciBzb21lb25lIGVsc2UgdG8gY292ZXIsIG9yIHN3YXAgYSBESUZGRVJFTlQgc2hpZnQgdGhhdCBkb2VzIG5vdCBjbGFzaCwgc28gc2hlIGNhbiBzdGlsbCBnZXQgdG8gaGVyIGNvbmNlcnQuIl0sInBocmFzZXMiOlsiQ291bGQgSSBqdW1wIGluIGZvciBhIG1vbWVudD8iLCJJIHVuZGVyc3RhbmQgeW91ciBjb25jZXJuLCBidXRcdTIwMjYiLCJIb3cgYWJvdXQgd2VcdTIwMjY\/IiwiSSdsbCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGlzLiJdfSwiczYiOiJIaSBNZWdhbiwgSSBjYW4gc2VlIGhvdyBtdWNoIHRoaXMgY29uY2VydCBtZWFucyB0byB5b3UsIHlvdSBoYXZlIHdhaXRlZCB5ZWFycyBmb3IgaXQsIGFuZCBJIHJlYWxseSB3YW50IHlvdSB0byBnby4gQnV0IEkgYW0gc28gc29ycnksIEkgY2Fubm90IHRyYWRlIHNoaWZ0cyB3aXRoIHlvdSB0aGlzIHRpbWUsIGFuZCBsZXQgbWUgZXhwbGFpbiB3aHkuIFRoZSBwcm9ibGVtIGlzIHRoYXQgZXhhY3QgZGF5LiBJZiBJIHRha2UgeW91ciBzaGlmdCwgSSB3aWxsIGhhdmUgdG8gbWlzcyBteSBiZXN0IGZyaWVuZCdzIGJpcnRoZGF5IHBhcnR5LiBJIGFscmVhZHkgcHJvbWlzZWQgaGVyIHdlZWtzIGFnbyB0aGF0IEkgd291bGQgYmUgdGhlcmUsIGFuZCBzaGUgaXMgY291bnRpbmcgb24gbWUuIFNoZSBoYXMgb3JnYW5pc2VkIGV2ZXJ5dGhpbmcsIGFuZCBmb3IgbWUgYSBwcm9taXNlIHRvIGEgY2xvc2UgZnJpZW5kIGlzIHNvbWV0aGluZyBJIGNhbm5vdCBicmVhayBhdCB0aGUgbGFzdCBtaW51dGUuIEkgaG9wZSB5b3UgdW5kZXJzdGFuZCwgaXQgaXMgbm90IHRoYXQgSSBkbyBub3Qgd2FudCB0byBoZWxwIHlvdS4gQWN0dWFsbHksIEkgcmVhbGx5IGRvIHdhbnQgdG8gaGVscC4gU28gaGVyZSBpcyBteSBpZGVhLiBMZXQgbWUgYXNrIHRoZSBvdGhlciBwZW9wbGUgb24gb3VyIHRlYW0sIG1heWJlIHNvbWVvbmUgZWxzZSBpcyBmcmVlIHRoYXQgZXZlbmluZyBhbmQgY2FuIGNvdmVyIHlvdXIgc2hpZnQuIEFuZCBpZiB0aGF0IGRvZXMgbm90IHdvcmssIHdlIGNhbiBsb29rIGF0IHRoZSBzY2hlZHVsZSB0b2dldGhlciBhbmQgdHJhZGUgYSBkaWZmZXJlbnQgc2hpZnQsIG9uZSB0aGF0IGRvZXMgbm90IGZhbGwgb24gdGhlIHNhbWUgZGF5IGFzIHRoZSBwYXJ0eS4gVGhhdCB3YXkgeW91IGNhbiBzdGlsbCBnbyB0byB5b3VyIGNvbmNlcnQsIGFuZCBJIGNhbiBrZWVwIG15IHByb21pc2UgdG8gbXkgZnJpZW5kLiBMZXQncyBmaW5kIGEgd2F5IHRvZ2V0aGVyLCBva2F5PyIsInM5IjoiTWVnYW4sIEkgY2FuIHRlbGwgaG93IG11Y2ggdGhpcyBjb25jZXJ0IG1lYW5zIHRvIHlvdSwgeW91IGhhdmUgYmVlbiB3YWl0aW5nIHllYXJzIGZvciBpdCwgc28gcGxlYXNlIGJlbGlldmUgbWUgd2hlbiBJIHNheSBJIGdlbnVpbmVseSB3YW50IHlvdSB0byBiZSB0aGVyZS4gVGhhdCBpcyBleGFjdGx5IHdoeSB0aGlzIGlzIGhhcmQ6IEkgaGF2ZSB0byBzYXkgbm8gdG8gdHJhZGluZyBzaGlmdHMgd2l0aCB5b3UsIGFuZCBJIHdvdWxkIHJhdGhlciBleHBsYWluIGhvbmVzdGx5IHRoYW4ganVzdCBsZWF2ZSB5b3Ugc3R1Y2suIFRoZSBjbGFzaCBpcyB0aGUgZGF0ZS4gSWYgSSBjb3ZlciB5b3VyIHNoaWZ0LCBJIHdpbGwgbWlzcyBteSBjbG9zZXN0IGZyaWVuZCdzIGJpcnRoZGF5IHBhcnR5LCBhbiBldmVudCBJIHByb21pc2VkIGhlciBJIHdvdWxkIGF0dGVuZCB3ZWVrcyBhZ28uIFNoZSBoYXMgcGxhbm5lZCB0aGUgd2hvbGUgdGhpbmcgYXJvdW5kIHRoZSBwZW9wbGUgc2hlIGxvdmVzIGJlaW5nIGluIHRoZSByb29tLCBhbmQgYmFja2luZyBvdXQgYXQgdGhlIGxhc3QgbWludXRlIHdvdWxkIGxldCBoZXIgZG93biBiYWRseS4gSSBob2xkIHBlcnNvbmFsIHByb21pc2VzIGxpa2UgdGhhdCBwcmV0dHkgc2FjcmVkLCBhbmQgaG9uZXN0bHkgSSBjb3VsZCBub3QgZW5qb3kgeW91ciBmYXZvdXIga25vd2luZyBJIGhhZCBicm9rZW4gaGVycy4gQnV0IGhlcmUgaXMgdGhlIHRoaW5nLCBzYXlpbmcgSSBjYW5ub3QgdGFrZSB0aGUgc2hpZnQgaXMgbm90IHRoZSBzYW1lIGFzIHNheWluZyBJIHdpbGwgbm90IGhlbHAsIGJlY2F1c2UgSSBhYnNvbHV0ZWx5IHdpbGwuIEZpcnN0LCBsZXQgbWUgcHV0IHRoZSB3b3JkIG91dCB0byB0aGUgcmVzdCBvZiB0aGUgdGVhbSB0b2RheTsgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSBzb21lb25lIGVsc2UgaXMgZnJlZSB0aGF0IGV2ZW5pbmcgYW5kIHdvdWxkIGhhcHBpbHkgc3dhcC4gQW5kIGlmIG5vYm9keSBiaXRlcywgbGV0J3Mgc2l0IGRvd24gd2l0aCB0aGUgc2NoZWR1bGUgdG9nZXRoZXIgYW5kIGZpbmQgYSBkaWZmZXJlbnQgc2hpZnQgb2YgbWluZSB0byB0cmFkZSwgb25lIHRoYXQgZG9lcyBub3QgbGFuZCBvbiB0aGUgcGFydHkgZGF0ZSwgc28geW91IHN0aWxsIGdldCB5b3VyIG5pZ2h0IGF0IHRoZSBjb25jZXJ0LiBJIHJlYWxseSBkbyBub3Qgd2FudCB5b3UgdG8gbWlzcyBzb21ldGhpbmcgeW91IGhhdmUgZHJlYW1lZCBhYm91dCBmb3IgeWVhcnMuIEdpdmUgbWUgYSBkYXkgdG8gbWFrZSBzb21lIGNhbGxzLCBhbmQgSSBhbSBjb25maWRlbnQgd2UgY2FuIGdldCB5b3UgdG8gdGhhdCBzaG93IHdpdGhvdXQgbWUgaGF2aW5nIHRvIGJyZWFrIG15IHdvcmQgdG8gbXkgZnJpZW5kLiBGYWlyIGVub3VnaD8ifSx7ImsiOiJ0NyIsIm51bSI6NywidHlwZUVuIjoiRXhwcmVzc2luZyBPcGluaW9ucyIsInByZXAiOjMwLCJyZWMiOjkwLCJwcm9tcHQiOiJEbyB5b3UgdGhpbmsgdGhhdCBwb2xpY2Ugb2ZmaWNlcnMgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IHRvIHJlYWQgcGVvcGxlJ3MgY2VsbHBob25lIG1lc3NhZ2VzIHdoZW4gY29uZHVjdGluZyBpbnZlc3RpZ2F0aW9ucz8gRXhwbGFpbiB5b3VyIHJlYXNvbnMuIiwicHJvbXB0TGVhZCI6IkFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlN0YXRlIHlvdXIgcG9zaXRpb24gY2xlYXJseSBpbiB0aGUgZmlyc3Qgc2VudGVuY2UgKHBpY2tpbmcgb25lIHNpZGUgaXMgZWFzaWVyIHRvIGRldmVsb3AgdGhhbiBzdGF5aW5nIG5ldXRyYWwpLiIsIkdpdmUgMlx1MjAxMzMgcmVhc29ucywgZWFjaCBkZXZlbG9wZWQgb3ZlciAyXHUyMDEzMyBzZW50ZW5jZXMgd2l0aCBhbiBleGFtcGxlOyA5MCBzZWNvbmRzIGlzIGxvbmcgXHUyMDE0IGRvbid0IHN0b3AgZWFybHkuIiwiQWNrbm93bGVkZ2UgdGhlIG90aGVyIHNpZGUgaW4gb25lIHNlbnRlbmNlIChUaGF0IHNhaWQsIFx1MjAyNikgdGhlbiBjb25jbHVkZSBcdTIwMTQgaXQgc2hvd3MgYmFsYW5jZWQgdGhpbmtpbmcuIiwiVGhlIHNhbXBsZXMgYXJndWUgWUVTLCBwb2xpY2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVhZCBjZWxscGhvbmUgbWVzc2FnZXMgZHVyaW5nIGFuIGludmVzdGlnYXRpb24sIGJ1dCBPTkxZIHdpdGggYSB3YXJyYW50IGFwcHJvdmVkIGJ5IGEganVkZ2UuIFJlYXNvbnM6IG1lc3NhZ2VzIGFyZSBvZnRlbiB0aGUgZGVjaXNpdmUgZXZpZGVuY2UgaW4gc2VyaW91cyBjcmltZXMgYW5kIGNhbiBwcm90ZWN0IHZpY3RpbXM7IGNyaW1pbmFscyBub3cgcGxhbiBldmVyeXRoaW5nIG9uIHRoZWlyIHBob25lcywgc28gYSB0b3RhbCBiYW4gd291bGQgY3JpcHBsZSBpbnZlc3RpZ2F0aW9uczsgYW5kIHRoZSB3YXJyYW50IHJlcXVpcmVtZW50IHN0b3BzIHBvbGljZSBmcm9tIHNub29waW5nIG9uIGlubm9jZW50IHBlb3BsZS4gQ29uY2VkZSB0aGUgcHJpdmFjeSB3b3JyeSwgdGhlbiBzaG93IHRoZSB3YXJyYW50IGFuc3dlcnMgaXQuIl0sInBocmFzZXMiOlsiSWYgSSBoYWQgdG8gY2hvb3NlLCBJJ2Qgc2F5XHUyMDI2IiwiTXkgbWFpbiByZWFzb24gaXNcdTIwMjYiLCJGb3IgZXhhbXBsZSwgXHUyMDI2IiwiVGhhdCBzYWlkLCBcdTIwMjYiLCJBbGwgdGhpbmdzIGNvbnNpZGVyZWQsIFx1MjAyNiJdfSwiczYiOiJJbiBteSBvcGluaW9uLCB5ZXMsIHBvbGljZSBvZmZpY2VycyBzaG91bGQgYmUgYWJsZSB0byByZWFkIHBlb3BsZSdzIGNlbGxwaG9uZSBtZXNzYWdlcyBkdXJpbmcgYW4gaW52ZXN0aWdhdGlvbiwgYnV0IG9ubHkgd2l0aCBvbmUgaW1wb3J0YW50IGNvbmRpdGlvbjogdGhleSBtdXN0IGdldCBhIHdhcnJhbnQgZnJvbSBhIGp1ZGdlIGZpcnN0LiBMZXQgbWUgZXhwbGFpbi4gTXkgZmlyc3QgcmVhc29uIGlzIHRoYXQgdG9kYXksIGNyaW1pbmFscyBwbGFuIGFsbW9zdCBldmVyeXRoaW5nIG9uIHRoZWlyIHBob25lcywgbWVzc2FnZXMgYWJvdXQgZHJ1Z3MsIGZyYXVkLCBvciBldmVuIHBsYW5zIHRvIGh1cnQgc29tZW9uZS4gSWYgdGhlIHBvbGljZSBjYW5ub3QgbG9vayBhdCB0aGVzZSBtZXNzYWdlcywgdGhleSB3aWxsIGxvc2UgdGhlIG1vc3QgaW1wb3J0YW50IGV2aWRlbmNlLCBhbmQgZGFuZ2Vyb3VzIHBlb3BsZSB3aWxsIGdvIGZyZWUuIFNlY29uZCwgcmVhZGluZyBtZXNzYWdlcyBjYW4gcHJvdGVjdCB2aWN0aW1zLiBGb3IgZXhhbXBsZSwgaWYgc29tZW9uZSBpcyBtaXNzaW5nIG9yIGluIGRhbmdlciwgdGhlaXIgcGhvbmUgbWVzc2FnZXMgY2FuIGhlbHAgdGhlIHBvbGljZSBmaW5kIHRoZW0gZmFzdCwgYW5kIHRpbWUgaXMgdmVyeSBpbXBvcnRhbnQgaW4gdGhlc2UgY2FzZXMuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGtleSBwb2ludCwgSSBkbyBub3QgdGhpbmsgcG9saWNlIHNob3VsZCByZWFkIGFueSBwaG9uZSB3aGVuZXZlciB0aGV5IHdhbnQuIFRoYXQgd291bGQgYmUgYSBiaWcgaW52YXNpb24gb2YgcHJpdmFjeS4gTm9ybWFsLCBpbm5vY2VudCBwZW9wbGUgaGF2ZSBwcml2YXRlIHRoaW5ncyBvbiB0aGVpciBwaG9uZXMsIGFuZCB0aGVpciBwcml2YWN5IG11c3QgYmUgcHJvdGVjdGVkLiBUaGlzIGlzIHdoeSB0aGUgd2FycmFudCBpcyBzbyBpbXBvcnRhbnQuIEEganVkZ2UgY2hlY2tzIGZpcnN0IGFuZCBzYXlzLCAnWWVzLCB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGlzIG9uZSBjYXNlLicgU28gdGhlIHBvbGljZSBnZXQgdGhlIGV2aWRlbmNlIHRoZXkgbmVlZCwgYnV0IGlubm9jZW50IHBlb3BsZSBhcmUgc2FmZS4gV2l0aCB0aGlzIHJ1bGUsIHdlIHByb3RlY3QgYm90aCBqdXN0aWNlIGFuZCBwcml2YWN5LiBUaGF0IGlzIHRoZSBmYWlyIGJhbGFuY2UuIiwiczkiOiJNeSB2aWV3IGlzIHRoYXQgcG9saWNlIG9mZmljZXJzIHNob3VsZCBpbmRlZWQgYmUgYWxsb3dlZCB0byByZWFkIHBlb3BsZSdzIGNlbGxwaG9uZSBtZXNzYWdlcyBkdXJpbmcgYW4gaW52ZXN0aWdhdGlvbiwgYnV0IHdpdGggb25lIGZpcm0gY29uZGl0aW9uIGF0dGFjaGVkOiB0aGV5IG11c3QgZmlyc3Qgb2J0YWluIGEgd2FycmFudCBmcm9tIGEganVkZ2UuIExldCBtZSBtYWtlIHRoZSBjYXNlLiBUaGUgcmVhbGl0eSBvZiBtb2Rlcm4gY3JpbWUgaXMgdGhhdCBhbG1vc3QgZXZlcnl0aGluZyBub3cgcnVucyB0aHJvdWdoIGEgcGhvbmUuIEZyYXVkIGlzIGFycmFuZ2VkIGJ5IHRleHQsIGRydWcgZGVhbHMgYXJlIHNldCB1cCBpbiBjaGF0IGFwcHMsIGFuZCB0aHJlYXRzIGxlYXZlIGEgZGlnaXRhbCB0cmFpbC4gSWYgaW52ZXN0aWdhdG9ycyB3ZXJlIHNpbXBseSBiYXJyZWQgZnJvbSB0aGF0IGV2aWRlbmNlLCB0aGV5IHdvdWxkIGJlIGZpZ2h0aW5nIHR3ZW50eS1maXJzdC1jZW50dXJ5IGNyaW1lIHdpdGggb25lIGhhbmQgdGllZCBiZWhpbmQgdGhlaXIgYmFja3MsIGFuZCBnZW51aW5lbHkgZGFuZ2Vyb3VzIHBlb3BsZSB3b3VsZCB3YWxrIGZyZWUgb24gYSB0ZWNobmljYWxpdHkuIFNlY29uZCwgYWNjZXNzIHRvIG1lc3NhZ2VzIGNhbiBiZSBhIG1hdHRlciBvZiBzYWZldHksIG5vdCBqdXN0IHByb3NlY3V0aW9uLiBXaGVuIHNvbWVvbmUgaXMgbWlzc2luZyBvciBpbiBpbW1lZGlhdGUgZGFuZ2VyLCB0aGUgdGV4dHMgb24gdGhlaXIgcGhvbmUsIG9yIGEgc3VzcGVjdCdzLCBjYW4gYmUgdGhlIGZhc3Rlc3Qgcm91dGUgdG8gZmluZGluZyB0aGVtLCBhbmQgaW4gdGhvc2Ugc2l0dWF0aW9ucyBob3VycyBtYXR0ZXIuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGhlYXJ0IG9mIG15IHBvc2l0aW9uLCBub25lIG9mIHRoYXQganVzdGlmaWVzIGxldHRpbmcgcG9saWNlIHRyYXdsIHRocm91Z2ggYW55b25lJ3MgcGhvbmUgb24gYSB3aGltLiBBbiBvcmRpbmFyeSBwZXJzb24ncyBtZXNzYWdlcyBob2xkIHRoZWlyIHdob2xlIHByaXZhdGUgbGlmZSwgdGhlaXIgcmVsYXRpb25zaGlwcywgZmluYW5jZXMgYW5kIGhlYWx0aCwgYW5kIHVucmVzdHJpY3RlZCBhY2Nlc3Mgd291bGQgYmUgYSBncm9zcyB2aW9sYXRpb24gb2YgcHJpdmFjeSBhbmQgcmlwZSBmb3IgYWJ1c2UuIFRoYXQgaXMgcHJlY2lzZWx5IHdoYXQgdGhlIHdhcnJhbnQgcmVxdWlyZW1lbnQgc29sdmVzOiBhbiBpbmRlcGVuZGVudCBqdWRnZSBleGFtaW5lcyB0aGUgc3BlY2lmaWMgY2FzZSwgd2VpZ2hzIHRoZSBldmlkZW5jZSwgYW5kIGF1dGhvcmlzZXMgYWNjZXNzIG9ubHkgd2hlcmUgdGhlcmUgaXMgcmVhbCBqdXN0aWZpY2F0aW9uLiBTbyB0aGUgZ3VpbHR5IGNhbm5vdCBoaWRlIGJlaGluZCBwcml2YWN5LCB5ZXQgdGhlIGlubm9jZW50IGFyZSBzaGllbGRlZCBmcm9tIGZpc2hpbmcgZXhwZWRpdGlvbnMuIEhhbmRsZWQgdGhhdCB3YXksIHJlYWRpbmcgcGhvbmUgbWVzc2FnZXMgaXMgbm90IGEgdGhyZWF0IHRvIG91ciBmcmVlZG9tcyBidXQgYSBjYXJlZnVsbHkgY2hlY2tlZCB0b29sIG9mIGp1c3RpY2UsIGFuZCBnZXR0aW5nIHRoYXQgYmFsYW5jZSByaWdodCwgcG93ZXJmdWwgd2hlbiB3YXJyYW50ZWQgYnV0IHJlc3RyYWluZWQgYnkgZGVmYXVsdCwgaXMgZXhhY3RseSB3aGF0IGEgZmFpciBsZWdhbCBzeXN0ZW0gc2hvdWxkIGRvLiJ9LHsiayI6InQ4IiwibnVtIjo4LCJ0eXBlRW4iOiJEZXNjcmliaW5nIGFuIFVudXN1YWwgU2l0dWF0aW9uIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IllvdSBhcmUgYXQgYSByZXN0YXVyYW50IG9yZGVyaW5nIHRha2VvdXQgZm9vZCBmb3IgZGlubmVyLCBhbmQgeW91IHNlZSBhIGtpZHMnIG1lYWwgdGhhdCB5b3VyIHR3byB5b3VuZ2VyIGJyb3RoZXJzIG1pZ2h0IGxpa2UuIENhbGwgeW91ciBicm90aGVycywgd2hvIGFyZSBhdCBob21lLiBEZXNjcmliZSBpbiBkZXRhaWwgd2hhdCB0aGUga2lkcycgbWVhbCBsb29rcyBsaWtlLCBhbmQgYXNrIHlvdXIgYnJvdGhlcnMgaWYgdGhleSdkIGxpa2UgeW91IHRvIG9yZGVyIHRoZW0gZWFjaCBhIGtpZHMnIG1lYWwuIiwiaW1nIjoidW51c3VhbCIsInRpcHMiOnsiYnVsbGV0cyI6WyJUaGlzIGlzIGEgUEhPTkUgQ0FMTDogZ3JlZXQgdGhlIHJpZ2h0IHBlcnNvbiAodGhlIHBvbGljZSAvIHlvdXIgZnJpZW5kKSwgdGhlbiBzYXkgd2hlcmUgeW91IGFyZS4iLCJEZXNjcmliZSBmcm9tIGdlbmVyYWwgdG8gc3BlY2lmaWM7IHRoZSBwaWN0dXJlIGlzIG1lYW50IHRvIGJlIHN0cmFuZ2UgXHUyMDE0IGp1c3QgZGVzY3JpYmUgd2hhdCB5b3Ugc2VlLCB1c2luZyAnSXQgbG9va3MgbGlrZSAvIGFzIGlmXHUyMDI2Jy4iLCJFbmQgd2l0aCBhIHJlcXVlc3QgZm9yIGFjdGlvbiAoc2VuZCBhIHBhdHJvbCAvIGFzayB3aGVyZSB0byBidXkpLiIsIlRoaXMgaXMgYSBwaG9uZSBjYWxsIHRvIHlvdXIgdHdvIHlvdW5nZXIgYnJvdGhlcnMgYWJvdXQgYSBmdW4ga2lkcycgbWVhbCB5b3UgaGF2ZSBzcG90dGVkLiBEZXNjcmliZSB0aGUgYWN0dWFsIHRyYXk6IGEgYnJpZ2h0IGJsdWUgbWVhbCBib3ggd2l0aCBhIGJpZyBzbWlsaW5nIGNhcnRvb24gZmFjZSBhbmQgYSBoYW5kbGUgb24gdG9wOyBhIGNhcnRvbiBvZiBnb2xkZW4gRnJlbmNoIGZyaWVzOyBhIGNob2NvbGF0ZXkgaWNlLWNyZWFtIHN1bmRhZSBpbiBhIGdsYXNzIHdpdGggaXRzIG93biBsaXR0bGUgc21pbGluZyBmYWNlLCBhIGNoZXJyeSBub3NlIGFuZCBhIHB1cnBsZSBzdHJhdzsgYSB3cmFwcGVkIHNhbmR3aWNoIG9yIGJ1cmdlciB3aXRoIGxldHR1Y2U7IGEgZ3JlZW4gYm90dGxlIG9mIGp1aWNlIGRlY29yYXRlZCB3aXRoIGEgYnV0dGVyZmx5OyBhbmQgYmVzdCBvZiBhbGwgYSBmcmVlIHRveSwgYSBsaXR0bGUgYmx1ZS1ncmVlbiB0dXJ0bGUgd2VhcmluZyBhIGdvbGRlbiBjcm93biwgbGlrZSBhIHR1cnRsZSBwcmluY2UuIEVuZCBieSBhc2tpbmcgaWYgdGhleSBlYWNoIHdhbnQgb25lLiJdLCJwaHJhc2VzIjpbIkknbSBjYWxsaW5nIHRvIHJlcG9ydFx1MjAyNiIsIlBpY3R1cmUgdGhpczogXHUyMDI2IiwiSXQgbG9va3MgYXMgaWZcdTIwMjYiLCJDb3VsZCB5b3Ugc2VuZFx1MjAyNiAvIERvIHlvdSBrbm93IHdoZXJlXHUyMDI2PyJdfSwiczYiOiJIZXkgZ3V5cywgaXQncyB5b3VyIGJpZyBicm90aGVyISBJIGFtIGF0IHRoZSByZXN0YXVyYW50IGdldHRpbmcgb3VyIGRpbm5lciwgYW5kIEkgZm91bmQgc29tZXRoaW5nIEkga25vdyB5b3UgdHdvIHdpbGwgbG92ZSwgYSBzcGVjaWFsIGtpZHMnIG1lYWwuIFdhaXQgdW50aWwgeW91IGhlYXIgdGhpcy4gVGhlIGJveCBpcyBicmlnaHQgYmx1ZSwgYW5kIGl0IGhhcyBhIGJpZyBzbWlsaW5nIGZhY2Ugb24gaXQsIHdpdGggaGFwcHkgZXllcyBhbmQgYSBjdXRlIGhhbmRsZSBvbiB0b3AsIHNvIGl0IGxvb2tzIGxpa2UgYSBmcmllbmRseSBsaXR0bGUgcm9ib3QuIEluc2lkZSB0aGUgbWVhbCB0aGVyZSBpcyBhIGxvdCBvZiBnb29kIHN0dWZmLiBUaGVyZSBpcyBhIGNhcnRvbiBvZiBnb2xkZW4gRnJlbmNoIGZyaWVzLCB5b3VyIGZhdm91cml0ZSEgVGhlcmUgaXMgYSBzYW5kd2ljaCwgb3IgbWF5YmUgYSBidXJnZXIsIHdpdGggZ3JlZW4gbGV0dHVjZSBpbnNpZGUuIFRoZXJlIGlzIGFsc28gYSBncmVlbiBib3R0bGUgb2YganVpY2Ugd2l0aCBhIHByZXR0eSBidXR0ZXJmbHkgcGljdHVyZSBvbiBpdC4gQW5kIHRoZXJlIGlzIGEgZGVzc2VydCwgYW4gaWNlLWNyZWFtIHN1bmRhZSBpbiBhIGdsYXNzLCB3aXRoIGNob2NvbGF0ZSBhbmQgY3JlYW0sIGFuZCwgdGhpcyBpcyBzbyBmdW5ueSwgdGhlIGljZSBjcmVhbSBoYXMgYSBzbWlsaW5nIGZhY2UgdG9vLCB3aXRoIGEgcmVkIGNoZXJyeSBmb3IgYSBub3NlIGFuZCBhIHB1cnBsZSBzdHJhdyEgQnV0IHRoZSBiZXN0IHBhcnQsIGFyZSB5b3UgcmVhZHk\/IEV2ZXJ5IG1lYWwgY29tZXMgd2l0aCBhIGZyZWUgdG95LiBJdCBpcyBhIGxpdHRsZSBibHVlIGFuZCBncmVlbiB0dXJ0bGUgd2VhcmluZyBhIGdvbGQgY3Jvd24sIGxpa2UgYSB0aW55IHR1cnRsZSBwcmluY2UhIFNvIHRlbGwgbWUsIGRvIHlvdSBib3RoIHdhbnQgb25lPyBTaG91bGQgSSBvcmRlciB0d28ga2lkcycgbWVhbHMsIG9uZSBmb3IgZWFjaCBvZiB5b3U\/IFNheSB5ZXMhIiwiczkiOiJIZXksIGl0J3MgbWUhIEkgYW0gc3RhbmRpbmcgYXQgdGhlIGNvdW50ZXIgb3JkZXJpbmcgb3VyIGRpbm5lciwgYW5kIEkgaGF2ZSBmb3VuZCBzb21ldGhpbmcgc28gcGVyZmVjdCBmb3IgeW91IHR3byB0aGF0IEkgaGFkIHRvIGNhbGwgYmVmb3JlIEkgb3JkZXIuIEl0IGlzIHRoZSBraWRzJyBtZWFsLCBhbmQgaG9uZXN0bHkgaXQgaXMgYWRvcmFibGUuIFBpY3R1cmUgdGhpczogdGhlIHdob2xlIHRoaW5nIGNvbWVzIGluIGEgYnJpZ2h0IGJsdWUgYm94IHdpdGggYSBiaWcgZ3Jpbm5pbmcgY2FydG9vbiBmYWNlIG9uIHRoZSBmcm9udCwgaGFwcHkgZXllcywgYSBjaGVlcmZ1bCBzbWlsZSwgYW5kIGEgbGl0dGxlIGhhbmRsZSBvbiB0b3AsIHNvIGl0IGxvb2tzIGxpa2UgYSBmcmllbmRseSByb2JvdCB5b3UgY2FycnkgYnkgdGhlIGhlYWQuIEFuZCBpdCBpcyBwYWNrZWQuIFRoZXJlIGlzIGEgY2FydG9uIG9mIGdvbGRlbiwgY3Jpc3B5IEZyZW5jaCBmcmllcywgYSB3cmFwcGVkIHNhbmR3aWNoLCBvciBtYXliZSBhIHNtYWxsIGJ1cmdlciwgd2l0aCBncmVlbiBsZXR0dWNlIHBva2luZyBvdXQsIGFuZCBhIGdyZWVuIGJvdHRsZSBvZiBqdWljZSB3aXRoIGEgcHJldHR5IGJ1dHRlcmZseSBkZXNpZ24gb24gdGhlIGxhYmVsLiBUaGVuIHRoZXJlIGlzIHRoZSBkZXNzZXJ0LCBhbmQgdGhpcyBpcyB0aGUgYml0IHRoYXQgbWFkZSBtZSBsYXVnaDogYW4gaWNlLWNyZWFtIHN1bmRhZSBpbiBhIHRhbGwgZ2xhc3MsIGxheWVyZWQgd2l0aCBjaG9jb2xhdGUgYW5kIGNyZWFtLCBhbmQgdGhlIGljZSBjcmVhbSBoYXMgaXRzIG93biBsaXR0bGUgc21pbGluZyBmYWNlLCBjb21wbGV0ZSB3aXRoIGEgYnJpZ2h0IHJlZCBjaGVycnkgZm9yIGEgbm9zZSBhbmQgYSBwdXJwbGUgc3RyYXcgc3RpY2tpbmcgdXAgbGlrZSBhIGhhdC4gQnV0IGhlcmUgaXMgdGhlIHJlYWwgc2VsbGluZyBwb2ludCwgdGhlIHBhcnQgSSBrbm93IHdpbGwgd2luIHlvdSBvdmVyOiBldmVyeSBraWRzJyBtZWFsIGNvbWVzIHdpdGggYSBmcmVlIHRveSwgYW5kIHRvZGF5J3MgdG95IGlzIGEgdGlueSBibHVlLWFuZC1ncmVlbiB0dXJ0bGUgd2VhcmluZyBhIHNoaW55IGdvbGQgY3Jvd24sIGJhc2ljYWxseSBhIHR1cnRsZSBwcmluY2UuIEl0IGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91IHR3byB3b3VsZCBmaWdodCBvdmVyLCBzbyBJIGFtIHRoaW5raW5nIEkgZ2V0IG9uZSBlYWNoIHRvIGtlZXAgdGhlIHBlYWNlLiBTbywgZGVjaXNpb24gdGltZTogZG8geW91IGJvdGggd2FudCBvbmU\/IFNheSB0aGUgd29yZCBhbmQgSSB3aWxsIG9yZGVyIHR3byBraWRzJyBtZWFscyByaWdodCBub3csIHR3byBib3hlcywgdHdvIHN1bmRhZXMsIGFuZCB0d28gdHVydGxlIHByaW5jZXMuIEp1c3QgdGVsbCBtZSB5ZXMhIn1dLCJ1aSI6eyJzdGFydFRlc3QiOiJTdGFydCB0aGUgdGVzdCIsIm1pY0VuYWJsZSI6IkVuYWJsZSBtaWNyb3Bob25lIiwibWljUmVhZHkiOiJNaWNyb3Bob25lIHJlYWR5IiwibWljQmxvY2tlZCI6Ik1pY3JvcGhvbmUgaXMgYmxvY2tlZCBvciB1bmF2YWlsYWJsZSBcdTIwMTQgdGhlIHBhZ2Ugd2lsbCBydW4gaW4gdGltZXItb25seSBtb2RlICh5b3UgY2FuIHN0aWxsIHByYWN0aXNlIHNwZWFraW5nIGFsb25nIHdpdGggdGhlIHRpbWVycykuIiwibWljTm90ZSI6IlJlY29yZGluZ3MgYXJlIHN0b3JlZCB0ZW1wb3JhcmlseSBpbiB5b3VyIGJyb3dzZXIgb25seSBcdTIwMTQgbm90aGluZyBpcyB1cGxvYWRlZCB0byBhbnkgc2VydmVyLiBUaGV5IGFyZSBsb3N0IHdoZW4geW91IGNsb3NlIHRoZSBwYWdlLCBzbyBkb3dubG9hZCBhbnkgeW91IHdhbnQgdG8ga2VlcC4iLCJwcmVwVGl0bGUiOiJQcmVwYXJhdGlvbiBUaW1lIiwicmVjVGl0bGUiOiJSZWNvcmRpbmciLCJzdGFydFByZXAiOiJcdTI1YjYgU3RhcnQgcHJlcGFyYXRpb24iLCJza2lwUHJlcCI6IlNraXAgXHUyMDE0IHJlY29yZCBub3cgXHUwMGJiIiwic3RvcFJlYyI6Ilx1MjVhMCBTdG9wIHJlY29yZGluZyIsInJlY29yZGVkIjoiUmVjb3JkZWQiLCJyZVJlY29yZCI6Ilx1MjFiYiBSZWNvcmQgYWdhaW4iLCJkb3dubG9hZCI6Ilx1MmIwNyBEb3dubG9hZCIsInRpbWVyT25seSI6IlRpbWVyLW9ubHkgbW9kZSAobm90IHJlY29yZGluZykiLCJzcGVha05vdyI6IlNQRUFLIE5PVyBcdTIwMTQgcmVjb3JkaW5nIHN0b3BzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aW1lIGlzIHVwIiwibmV4dCI6Ik5FWFQiLCJjaG9vc2VIaW50IjoiQ2xpY2sgdG8gY2hvb3NlIG9uZSBvcHRpb24gXHUyMDE0IGlmIHRoZSA2MCBzZWNvbmRzIHJ1biBvdXQsIHRoZSBzeXN0ZW0gY2hvb3NlcyBmb3IgeW91IiwiY29uZmlybUNob2ljZSI6IkNvbmZpcm0gY2hvaWNlICYgY29udGludWUgXHUwMGJiIiwieW91ckNob2ljZSI6IllvdXIgQ2hvaWNlIiwidGlwc1RvZ2dsZSI6Ilx1ZDgzZFx1ZGNhMSBUaXBzICYgc2FtcGxlIGFuc3dlcnMgKG9wZW4gYWZ0ZXIgeW91IGZpbmlzaCBzcGVha2luZykiLCJ0YWJUaXBzIjoiT3V0bGluZSAmIHBocmFzZXMiLCJ0YWJTNiI6IlNhbXBsZSBDTEIgNiIsInRhYlM5IjoiU2FtcGxlIENMQiA5IiwidGFiUnVicmljIjoiU2VsZi1hc3Nlc3NtZW50IiwicnVicmljTm90ZSI6Ikxpc3RlbiB0byB5b3VyIHJlY29yZGluZywgdGhlbiByYXRlIHlvdXJzZWxmIDFcdTIwMTM1IG9uIGVhY2ggY3JpdGVyaW9uICh0aGUgNCBvZmZpY2lhbCBDRUxQSVAgcmF0aW5nIGRpbWVuc2lvbnMpOiIsInJ1YnJpY0NyaXQiOlsiQ29udGVudCAmIENvaGVyZW5jZSBcdTIwMTQgY29tcGxldGUgaWRlYXMsIGxvZ2ljYWwgZmxvdyIsIlZvY2FidWxhcnkgXHUyMDE0IHJhbmdlIGFuZCBwcmVjaXNpb24iLCJMaXN0ZW5hYmlsaXR5IFx1MjAxNCBwcm9udW5jaWF0aW9uLCBpbnRvbmF0aW9uLCBmbHVlbmN5IiwiVGFzayBGdWxmaWxsbWVudCBcdTIwMTQgYWRkcmVzc2VzIHRoZSB0YXNrLCBhcHByb3ByaWF0ZSBsZW5ndGgiXSwiZXN0aW1hdGUiOiJFc3RpbWF0ZWQgbGV2ZWwgKGZvciByZWZlcmVuY2UpOiIsImVzdERpc2NsYWltZXIiOiJTZWxmLWFzc2Vzc21lbnQgaXMgYSByb3VnaCBndWlkZSBvbmx5IFx1MjAxNCBpdCBkb2VzIG5vdCByZXBsYWNlIGFuIG9mZmljaWFsIHNjb3JlLiIsInVzZWZ1bFBocmFzZXMiOiJVc2VmdWwgcGhyYXNlcyIsImVuZFRpdGxlIjoiU3BlYWtpbmcgdGVzdCBjb21wbGV0ZSEiLCJlbmRTdWIiOiJSZXBsYXkgZWFjaCB0YXNrLCBjb21wYXJlIHlvdXIgYW5zd2VycyB3aXRoIHRoZSBDTEIgNiAvIENMQiA5IHNhbXBsZXMsIHRoZW4gcmF0ZSB5b3Vyc2VsZi4iLCJlbmROb1JlYyI6Im5vdCByZWNvcmRlZCIsImVuZFJlZG8iOiJcdTIxYmIgU3RhcnQgb3ZlciIsImVuZFQyIjoiQ29udGludWUgdG8gUHJhY3RpY2UgVGVzdCIsImVuZEh1YiI6Ilx1MjE5MCBCYWNrIHRvIENFTFBJUCBIdWIiLCJ3YXJtdXBCYWRnZSI6Ildhcm0tdXAgXHUyMDE0IG5vdCBzY29yZWQiLCJpbnRyb05vdGVzIjpbIkFuIGFjY3VyYXRlIHNpbXVsYXRpb24gb2YgdGhlIHJlYWwgQ0VMUElQIEdlbmVyYWwgU3BlYWtpbmcgdGVzdDogMSBwcmFjdGljZSAod2FybS11cCkgdGFzayArIDggc2NvcmVkIHRhc2tzLCBhYm91dCAyMCBtaW51dGVzIGluIHRvdGFsLiIsIkVhY2ggdGFzazogcmVhZCB0aGUgcHJvbXB0IFx1MjE5MiA8Yj5QcmVwYXJhdGlvbjwvYj4gY291bnRkb3duIFx1MjE5MiBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IHRvIDxiPlJlY29yZGluZzwvYj4gKHdpdGggYSBiZWVwKSBcdTIxOTIgc3RvcHMgd2hlbiB0aW1lIGlzIHVwLiIsIk9uIHRoZSByZWFsIHRlc3QgeW91IGNhbm5vdCBnbyBiYWNrIHRvIGEgcHJldmlvdXMgdGFzay4gSW4gcHJhY3RpY2UgbW9kZSwgeW91IGNhbiBjbGljayB0aGUgbnVtYmVyZWQgY2hpcHMgYWJvdmUgdG8gcmV2aXNpdCBhbnkgdGFzay4iLCJBZnRlciBzcGVha2luZyBvbiBlYWNoIHRhc2ssIG9wZW4gPGI+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 11 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-6450","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6450","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=6450"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6450\/revisions"}],"predecessor-version":[{"id":6509,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6450\/revisions\/6509"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}